Files
bellsystems-cp/backend/melodies/database.py

76 lines
2.1 KiB
Python

import json
import logging
from mqtt.database import get_db
logger = logging.getLogger("melodies.database")
async def insert_melody(melody_id: str, status: str, data: dict) -> None:
db = await get_db()
await db.execute(
"INSERT INTO melody_drafts (id, status, data) VALUES (?, ?, ?)",
(melody_id, status, json.dumps(data)),
)
await db.commit()
async def update_melody(melody_id: str, data: dict) -> None:
db = await get_db()
await db.execute(
"UPDATE melody_drafts SET data = ?, updated_at = datetime('now') WHERE id = ?",
(json.dumps(data), melody_id),
)
await db.commit()
async def update_status(melody_id: str, status: str) -> None:
db = await get_db()
await db.execute(
"UPDATE melody_drafts SET status = ?, updated_at = datetime('now') WHERE id = ?",
(status, melody_id),
)
await db.commit()
async def get_melody(melody_id: str) -> dict | None:
db = await get_db()
rows = await db.execute_fetchall(
"SELECT * FROM melody_drafts WHERE id = ?", (melody_id,)
)
if not rows:
return None
row = dict(rows[0])
row["data"] = json.loads(row["data"])
return row
async def list_melodies(status: str | None = None) -> list[dict]:
db = await get_db()
if status and status != "all":
rows = await db.execute_fetchall(
"SELECT * FROM melody_drafts WHERE status = ? ORDER BY updated_at DESC",
(status,),
)
else:
rows = await db.execute_fetchall(
"SELECT * FROM melody_drafts ORDER BY updated_at DESC"
)
results = []
for row in rows:
r = dict(row)
r["data"] = json.loads(r["data"])
results.append(r)
return results
async def delete_melody(melody_id: str) -> None:
db = await get_db()
await db.execute("DELETE FROM melody_drafts WHERE id = ?", (melody_id,))
await db.commit()
async def count_melodies() -> int:
db = await get_db()
rows = await db.execute_fetchall("SELECT COUNT(*) FROM melody_drafts")
return rows[0][0]