"""Was der Seite noch fehlt. Jeder darf aufschreiben, was er sich wünscht. Alle sehen alle Wünsche, ändern darf jeder nur die eigenen — wie bei den Filmsammlungen. """ from datetime import datetime, timezone from . import users from .db import connect from .users import besitzer, gehoert_mir SCHEMA = """ CREATE TABLE IF NOT EXISTS features ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, user_id INTEGER, text TEXT NOT NULL, created_at TEXT NOT NULL ); """ MAX_LAENGE = 500 def init(): with connect() as conn: conn.executescript(SCHEMA) users.user_id_nachruesten(conn, "features") def alle(session_id): """Alle Wünsche, jeder mit dem Namen seines Verfassers.""" with connect() as conn: rows = conn.execute( "SELECT f.*, u.name FROM features f " "LEFT JOIN users u ON u.id = f.user_id " "ORDER BY f.created_at DESC" ).fetchall() ich = besitzer(session_id) return [ { **{ k: v for k, v in dict(r).items() if k not in ("session_id", "user_id") }, "mine": gehoert_mir(r, session_id, ich), } for r in rows ] def anlegen(session_id, text): """Gibt None zurück, wenn nichts dasteht.""" text = (text or "").strip()[:MAX_LAENGE] if not text: return None with connect() as conn: conn.execute( "INSERT INTO features (session_id, user_id, text, created_at) " "VALUES (?, ?, ?, ?)", ( session_id, besitzer(session_id), text, datetime.now(timezone.utc).isoformat(timespec="seconds"), ), ) return alle(session_id) def aendern(feature_id, text): """Der Host räumt auf: Tippfehler, Dopplungen, unklare Formulierungen.""" text = (text or "").strip()[:MAX_LAENGE] if not text: return 0 with connect() as conn: return conn.execute( "UPDATE features SET text = ? WHERE id = ?", (text, feature_id) ).rowcount def loeschen(feature_id): """Ohne Sitzungsbindung — den Knopf zeigt die Oberfläche nur dem Verfasser und dem Host.""" with connect() as conn: return conn.execute( "DELETE FROM features WHERE id = ?", (feature_id,) ).rowcount