65 lines
2.3 KiB
Python
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()
|