diff --git a/bincio/serve/db.py b/bincio/serve/db.py index 16d3b7f..d939ad4 100644 --- a/bincio/serve/db.py +++ b/bincio/serve/db.py @@ -45,6 +45,11 @@ CREATE TABLE IF NOT EXISTS invites ( used_at INTEGER ); +CREATE TABLE IF NOT EXISTS settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL +); + CREATE INDEX IF NOT EXISTS sessions_handle ON sessions(handle); CREATE INDEX IF NOT EXISTS invites_created_by ON invites(created_by); """ @@ -149,6 +154,28 @@ def delete_user(db: sqlite3.Connection, handle: str) -> None: db.commit() +def count_users(db: sqlite3.Connection) -> int: + """Return the total number of registered users.""" + row = db.execute("SELECT COUNT(*) FROM users").fetchone() + return row[0] if row else 0 + + +# ── Settings ────────────────────────────────────────────────────────────────── + +def get_setting(db: sqlite3.Connection, key: str) -> Optional[str]: + row = db.execute("SELECT value FROM settings WHERE key = ?", (key,)).fetchone() + return row["value"] if row else None + + +def set_setting(db: sqlite3.Connection, key: str, value: str) -> None: + db.execute( + "INSERT INTO settings (key, value) VALUES (?, ?) " + "ON CONFLICT(key) DO UPDATE SET value = excluded.value", + (key, value), + ) + db.commit() + + # ── Sessions ────────────────────────────────────────────────────────────────── def create_session(db: sqlite3.Connection, handle: str) -> str: