94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
|
|
import db
|
||
|
|
|
||
|
|
|
||
|
|
DEFAULT_CHANNELS = [
|
||
|
|
("stable", "正式版", 1, 10),
|
||
|
|
("preview", "预览版", 1, 20),
|
||
|
|
("dev", "开发版", 1, 30),
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def list_apps() -> list[dict]:
|
||
|
|
conn = db.get_conn()
|
||
|
|
rows = conn.execute("SELECT app_id, app_name FROM apps").fetchall()
|
||
|
|
conn.close()
|
||
|
|
return [{"app_id": row["app_id"], "app_name": row["app_name"]} for row in rows]
|
||
|
|
|
||
|
|
|
||
|
|
def add_app_with_default_channels(app_id: str, app_name: str):
|
||
|
|
conn = db.get_conn()
|
||
|
|
try:
|
||
|
|
conn.execute("INSERT INTO apps(app_id, app_name) VALUES (?, ?)", (app_id, app_name))
|
||
|
|
conn.executemany(
|
||
|
|
"INSERT INTO channels(app_id,channel_code,display_name,enabled,sort_order) VALUES(?,?,?,?,?)",
|
||
|
|
[(app_id, code, name, enabled, order) for code, name, enabled, order in DEFAULT_CHANNELS],
|
||
|
|
)
|
||
|
|
conn.commit()
|
||
|
|
except Exception:
|
||
|
|
conn.rollback()
|
||
|
|
raise
|
||
|
|
finally:
|
||
|
|
conn.close()
|
||
|
|
|
||
|
|
|
||
|
|
def app_exists(app_id: str) -> bool:
|
||
|
|
conn = db.get_conn()
|
||
|
|
row = conn.execute("SELECT 1 FROM apps WHERE app_id=?", (app_id,)).fetchone()
|
||
|
|
conn.close()
|
||
|
|
return bool(row)
|
||
|
|
|
||
|
|
|
||
|
|
def get_app(app_id: str):
|
||
|
|
conn = db.get_conn()
|
||
|
|
row = conn.execute("SELECT app_id, app_name FROM apps WHERE app_id=?", (app_id,)).fetchone()
|
||
|
|
conn.close()
|
||
|
|
return row
|
||
|
|
|
||
|
|
|
||
|
|
def list_channels(app_id: str, include_disabled: bool = True) -> list[dict]:
|
||
|
|
conn = db.get_conn()
|
||
|
|
sql = (
|
||
|
|
"SELECT channel_code,display_name,enabled,sort_order FROM channels WHERE app_id=?"
|
||
|
|
+ ("" if include_disabled else " AND enabled=1")
|
||
|
|
+ " ORDER BY sort_order,channel_code"
|
||
|
|
)
|
||
|
|
rows = conn.execute(sql, (app_id,)).fetchall()
|
||
|
|
conn.close()
|
||
|
|
return [
|
||
|
|
{
|
||
|
|
"channel_code": row["channel_code"],
|
||
|
|
"display_name": row["display_name"],
|
||
|
|
"enabled": bool(row["enabled"]),
|
||
|
|
"sort_order": row["sort_order"],
|
||
|
|
}
|
||
|
|
for row in rows
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def get_channel(app_id: str, channel: str):
|
||
|
|
conn = db.get_conn()
|
||
|
|
row = conn.execute("SELECT * FROM channels WHERE app_id=? AND channel_code=?", (app_id, channel)).fetchone()
|
||
|
|
conn.close()
|
||
|
|
return row
|
||
|
|
|
||
|
|
|
||
|
|
def save_channel(app_id: str, code: str, name: str, enabled: bool, sort_order: int):
|
||
|
|
conn = db.get_conn()
|
||
|
|
try:
|
||
|
|
conn.execute(
|
||
|
|
"""INSERT INTO channels(app_id,channel_code,display_name,enabled,sort_order)
|
||
|
|
VALUES(?,?,?,?,?)
|
||
|
|
ON CONFLICT(app_id,channel_code) DO UPDATE SET
|
||
|
|
display_name=excluded.display_name,
|
||
|
|
enabled=excluded.enabled,
|
||
|
|
sort_order=excluded.sort_order,
|
||
|
|
updated_at=datetime('now')""",
|
||
|
|
(app_id, code, name, int(enabled), sort_order),
|
||
|
|
)
|
||
|
|
conn.commit()
|
||
|
|
except Exception:
|
||
|
|
conn.rollback()
|
||
|
|
raise
|
||
|
|
finally:
|
||
|
|
conn.close()
|