Added Draft Melodies. Further improvements to the UI
This commit is contained in:
75
backend/melodies/database.py
Normal file
75
backend/melodies/database.py
Normal file
@@ -0,0 +1,75 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user