Files
update-server/app/repositories/app_channel_repository.py
T

94 lines
2.8 KiB
Python
Raw Normal View History

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()