Initial OnlyScavs: keys, ratings, grid icons
This commit is contained in:
110
app.py
Normal file
110
app.py
Normal file
@@ -0,0 +1,110 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for
|
||||
import sqlite3
|
||||
|
||||
app = Flask(__name__)
|
||||
DB_PATH = "tarkov.db"
|
||||
|
||||
|
||||
def get_db():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
return conn
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
conn = get_db()
|
||||
maps = conn.execute("""
|
||||
SELECT id, name
|
||||
FROM maps
|
||||
ORDER BY name
|
||||
""").fetchall()
|
||||
map_filter = request.args.get("map_id", type=int)
|
||||
key_map_rows = conn.execute("""
|
||||
SELECT key_id, map_id
|
||||
FROM key_maps
|
||||
""").fetchall()
|
||||
key_maps = {}
|
||||
for row in key_map_rows:
|
||||
key_maps.setdefault(row["key_id"], set()).add(row["map_id"])
|
||||
|
||||
key_query = """
|
||||
SELECT
|
||||
k.id,
|
||||
k.name,
|
||||
k.icon_url,
|
||||
k.grid_image_url,
|
||||
k.wiki_url,
|
||||
r.priority,
|
||||
r.reason,
|
||||
COALESCE(r.used_in_quest, 0) AS used_in_quest
|
||||
FROM keys k
|
||||
"""
|
||||
params = []
|
||||
if map_filter:
|
||||
key_query += """
|
||||
JOIN key_maps kmf
|
||||
ON k.id = kmf.key_id
|
||||
AND kmf.map_id = ?
|
||||
"""
|
||||
params.append(map_filter)
|
||||
key_query += """
|
||||
LEFT JOIN key_ratings r ON k.id = r.key_id
|
||||
ORDER BY
|
||||
CASE WHEN r.priority IS NULL THEN 1 ELSE 0 END,
|
||||
r.priority DESC,
|
||||
k.name
|
||||
"""
|
||||
keys = conn.execute(key_query, params).fetchall()
|
||||
conn.close()
|
||||
|
||||
key_maps = {k: sorted(v) for k, v in key_maps.items()}
|
||||
return render_template(
|
||||
"index.html",
|
||||
keys=keys,
|
||||
maps=maps,
|
||||
key_maps=key_maps,
|
||||
map_filter=map_filter,
|
||||
)
|
||||
|
||||
|
||||
@app.route("/rate", methods=["POST"])
|
||||
def rate_key():
|
||||
key_id = request.form["key_id"]
|
||||
priority = request.form["priority"]
|
||||
reason = request.form.get("reason", "")
|
||||
used_in_quest = 1 if request.form.get("used_in_quest") == "on" else 0
|
||||
map_filter = request.form.get("map_id")
|
||||
map_ids = []
|
||||
for value in request.form.getlist("map_ids"):
|
||||
try:
|
||||
map_ids.append(int(value))
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
conn = get_db()
|
||||
conn.execute("""
|
||||
INSERT INTO key_ratings (key_id, priority, reason, used_in_quest)
|
||||
VALUES (?, ?, ?, ?)
|
||||
ON CONFLICT(key_id) DO UPDATE SET
|
||||
priority = excluded.priority,
|
||||
reason = excluded.reason,
|
||||
used_in_quest = excluded.used_in_quest,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
""", (key_id, priority, reason, used_in_quest))
|
||||
conn.execute("DELETE FROM key_maps WHERE key_id = ?", (key_id,))
|
||||
if map_ids:
|
||||
conn.executemany(
|
||||
"INSERT OR IGNORE INTO key_maps (key_id, map_id) VALUES (?, ?)",
|
||||
[(key_id, map_id) for map_id in map_ids],
|
||||
)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
if map_filter:
|
||||
return redirect(url_for("index", map_id=map_filter))
|
||||
return redirect(url_for("index"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=5000, debug=True)
|
||||
Reference in New Issue
Block a user