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

65 lines
2.3 KiB
Python

import db
def get_policy(app_id: str, channel: str):
conn = db.get_conn()
row = conn.execute("SELECT * FROM version_policies WHERE app_id=? AND channel=?", (app_id, channel)).fetchone()
conn.close()
return row
def save_policy(
app_id: str,
channel: str,
force_update: bool,
allow_rollback: bool,
offline_allowed: bool,
valid_until: str,
min_supported_version: str,
disabled_versions_json: str,
git_tags_enabled: bool,
message: str,
) -> tuple[str, int | None]:
conn = db.get_conn()
try:
channel_row = conn.execute("SELECT * FROM channels WHERE app_id=? AND channel_code=?", (app_id, channel)).fetchone()
if not channel_row:
return "channel_not_found", None
if not channel_row["enabled"]:
return "channel_disabled", None
row = conn.execute("SELECT policy_seq FROM version_policies WHERE app_id=? AND channel=?", (app_id, channel)).fetchone()
next_seq = (int(row["policy_seq"]) + 1) if row else 1
values = (
next_seq,
int(bool(force_update)),
int(bool(allow_rollback)),
int(bool(offline_allowed)),
valid_until,
min_supported_version,
disabled_versions_json,
int(bool(git_tags_enabled)),
message,
app_id,
channel,
)
conn.execute(
"""
INSERT INTO version_policies(policy_seq,force_update,allow_rollback,offline_allowed,valid_until,
min_supported_version,disabled_versions,git_tags_enabled,message,app_id,channel)
VALUES(?,?,?,?,?,?,?,?,?,?,?)
ON CONFLICT(app_id,channel) DO UPDATE SET policy_seq=excluded.policy_seq,
force_update=excluded.force_update,allow_rollback=excluded.allow_rollback,
offline_allowed=excluded.offline_allowed,valid_until=excluded.valid_until,
min_supported_version=excluded.min_supported_version,disabled_versions=excluded.disabled_versions,
git_tags_enabled=excluded.git_tags_enabled,message=excluded.message,updated_at=datetime('now')
""",
values,
)
conn.commit()
return "ok", next_seq
except Exception:
conn.rollback()
raise
finally:
conn.close()