update
This commit is contained in:
@@ -14,13 +14,15 @@ import sqlite3
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from . import users
|
||||
from .db import connect
|
||||
from .users import besitzer
|
||||
from .users import WEM, besitzer
|
||||
|
||||
SCHEMA = """
|
||||
CREATE TABLE IF NOT EXISTS suggestions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id TEXT NOT NULL,
|
||||
user_id INTEGER,
|
||||
movie_id INTEGER NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
year INTEGER,
|
||||
@@ -38,67 +40,11 @@ COOKIE = "filmabend_sid"
|
||||
DREH_DAUER = 4.2
|
||||
|
||||
|
||||
# Ein Vorschlag je Person. Früher stand das UNIQUE auf der Sitzung — dann
|
||||
# blockierte der Vorschlag des einen Namens den des nächsten, sobald beide
|
||||
# denselben Browser benutzten.
|
||||
INDIZES = """
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS suggestions_je_benutzer
|
||||
ON suggestions (user_id) WHERE user_id IS NOT NULL;
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS suggestions_je_sitzung
|
||||
ON suggestions (session_id) WHERE user_id IS NULL;
|
||||
"""
|
||||
|
||||
|
||||
def _unique_loesen(conn):
|
||||
"""Das alte UNIQUE steckt in der Spaltendefinition — Tabelle neu bauen."""
|
||||
sql = conn.execute(
|
||||
"SELECT sql FROM sqlite_master WHERE type='table' AND name='suggestions'"
|
||||
).fetchone()
|
||||
if not sql or "UNIQUE" not in sql["sql"]:
|
||||
return
|
||||
conn.executescript(
|
||||
"""
|
||||
ALTER TABLE suggestions RENAME TO suggestions_alt;
|
||||
CREATE TABLE suggestions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id TEXT NOT NULL,
|
||||
user_id INTEGER,
|
||||
movie_id INTEGER NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
year INTEGER,
|
||||
poster_path TEXT,
|
||||
name TEXT,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
INSERT INTO suggestions
|
||||
(id, session_id, user_id, movie_id, title, year, poster_path,
|
||||
name, created_at)
|
||||
SELECT id, session_id, user_id, movie_id, title, year, poster_path,
|
||||
name, created_at FROM suggestions_alt;
|
||||
DROP TABLE suggestions_alt;
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def _spalte_user_id(conn, tabelle):
|
||||
"""Nachrüsten und aus der Sitzung füllen — einmalig je Datenbank."""
|
||||
spalten = {r[1] for r in conn.execute(f"PRAGMA table_info({tabelle})")}
|
||||
if "user_id" in spalten:
|
||||
return
|
||||
conn.execute(f"ALTER TABLE {tabelle} ADD COLUMN user_id INTEGER")
|
||||
conn.execute(
|
||||
f"UPDATE {tabelle} SET user_id = ("
|
||||
" SELECT user_id FROM user_sessions s WHERE s.session_id = "
|
||||
f" {tabelle}.session_id)"
|
||||
)
|
||||
|
||||
|
||||
def init():
|
||||
with connect() as conn:
|
||||
conn.executescript(SCHEMA)
|
||||
_spalte_user_id(conn, "suggestions")
|
||||
_unique_loesen(conn)
|
||||
conn.executescript(INDIZES)
|
||||
# Ein Vorschlag je Person
|
||||
users.je_person(conn, "suggestions", SCHEMA)
|
||||
|
||||
|
||||
def neue_session():
|
||||
@@ -123,10 +69,6 @@ def alle():
|
||||
]
|
||||
|
||||
|
||||
# Mit Namen zählt der Name, ohne Namen die Sitzung
|
||||
WEM = "(user_id = ? OR (? IS NULL AND user_id IS NULL AND session_id = ?))"
|
||||
|
||||
|
||||
def von_session(session_id):
|
||||
"""Der eigene Vorschlag — auch aus einem anderen Browser."""
|
||||
ich = besitzer(session_id)
|
||||
@@ -191,7 +133,9 @@ def ziehen():
|
||||
"winkel": winkel,
|
||||
"dauer": DREH_DAUER,
|
||||
"gewinner": {
|
||||
k: v for k, v in eintraege[treffer].items() if k != "session_id"
|
||||
k: v
|
||||
for k, v in eintraege[treffer].items()
|
||||
if k not in ("session_id", "user_id")
|
||||
},
|
||||
"anzahl": len(eintraege),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user