91 lines
2.4 KiB
Python
91 lines
2.4 KiB
Python
"""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
|