feat(server): modularize backend and admin console
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user