error logic to cancel / disable link
This commit is contained in:
@@ -43,7 +43,8 @@ def ensure_schema(conn: sqlite3.Connection) -> None:
|
||||
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
disabled_at TEXT,
|
||||
banned_at TEXT,
|
||||
banned_reason TEXT
|
||||
banned_reason TEXT,
|
||||
requires_revision INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS links_user_url_norm
|
||||
@@ -72,6 +73,19 @@ def ensure_schema(conn: sqlite3.Connection) -> None:
|
||||
ON link_tombstones (user_name, url_normalized);
|
||||
"""
|
||||
)
|
||||
_ensure_column(
|
||||
conn,
|
||||
"links",
|
||||
"requires_revision",
|
||||
"ALTER TABLE links ADD COLUMN requires_revision INTEGER NOT NULL DEFAULT 0",
|
||||
)
|
||||
|
||||
|
||||
def _ensure_column(conn: sqlite3.Connection, table: str, column: str, ddl: str) -> None:
|
||||
cols = [row[1] for row in conn.execute(f"PRAGMA table_info({table})").fetchall()]
|
||||
if column in cols:
|
||||
return
|
||||
conn.execute(ddl)
|
||||
|
||||
|
||||
def normalize_url(url: str) -> str:
|
||||
@@ -247,6 +261,74 @@ def set_banned(
|
||||
return True
|
||||
|
||||
|
||||
def mark_requires_revision(
|
||||
conn: sqlite3.Connection,
|
||||
user_name: str,
|
||||
url_original: str,
|
||||
reason: str,
|
||||
) -> bool:
|
||||
url_norm = normalize_url(url_original)
|
||||
rows = conn.execute(
|
||||
"SELECT id, url_original FROM links WHERE user_name = ? AND url_normalized = ?",
|
||||
(user_name, url_norm),
|
||||
).fetchall()
|
||||
if not rows:
|
||||
return False
|
||||
for row in rows:
|
||||
conn.execute(
|
||||
"""
|
||||
UPDATE links
|
||||
SET requires_revision = 1,
|
||||
enabled = 0,
|
||||
disabled_at = COALESCE(disabled_at, CURRENT_TIMESTAMP),
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
""",
|
||||
(row["id"],),
|
||||
)
|
||||
add_history(
|
||||
conn,
|
||||
user_name,
|
||||
"requires_revision",
|
||||
link_id=row["id"],
|
||||
old_url=row["url_original"],
|
||||
note=reason,
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
def mark_requires_revision_by_norm(
|
||||
conn: sqlite3.Connection, url_norm: str, reason: str
|
||||
) -> int:
|
||||
rows = conn.execute(
|
||||
"SELECT id, user_name, url_original FROM links WHERE url_normalized = ?",
|
||||
(url_norm,),
|
||||
).fetchall()
|
||||
if not rows:
|
||||
return 0
|
||||
for row in rows:
|
||||
conn.execute(
|
||||
"""
|
||||
UPDATE links
|
||||
SET requires_revision = 1,
|
||||
enabled = 0,
|
||||
disabled_at = COALESCE(disabled_at, CURRENT_TIMESTAMP),
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
""",
|
||||
(row["id"],),
|
||||
)
|
||||
add_history(
|
||||
conn,
|
||||
row["user_name"],
|
||||
"requires_revision",
|
||||
link_id=row["id"],
|
||||
old_url=row["url_original"],
|
||||
note=reason,
|
||||
)
|
||||
return len(rows)
|
||||
|
||||
|
||||
def rename_link(
|
||||
conn: sqlite3.Connection,
|
||||
user_name: str,
|
||||
@@ -329,6 +411,7 @@ def get_links(
|
||||
users: Iterable[str] | None = None,
|
||||
include_disabled: bool = False,
|
||||
include_banned: bool = False,
|
||||
requires_revision_only: bool = False,
|
||||
) -> list[sqlite3.Row]:
|
||||
params: list = []
|
||||
where = []
|
||||
@@ -340,6 +423,8 @@ def get_links(
|
||||
where.append("enabled = 1")
|
||||
if not include_banned:
|
||||
where.append("banned_at IS NULL")
|
||||
if requires_revision_only:
|
||||
where.append("requires_revision = 1")
|
||||
clause = " AND ".join(where)
|
||||
if clause:
|
||||
clause = "WHERE " + clause
|
||||
|
||||
Reference in New Issue
Block a user