chore: document project-wide soft delete pattern and add deleted_by column to all tables
This commit is contained in:
@@ -3,7 +3,7 @@ import logging
|
||||
from datetime import datetime, timezone
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import RedirectResponse, JSONResponse, HTMLResponse
|
||||
from devplacepy.database import get_table, db, paginate, resolve_object_url
|
||||
from devplacepy.database import get_table, db, paginate, resolve_object_url, _now_iso
|
||||
from devplacepy.utils import generate_uid, require_user, time_ago
|
||||
from devplacepy.seo import base_seo_context
|
||||
from devplacepy.responses import respond
|
||||
@@ -46,7 +46,10 @@ async def saved_page(request: Request, before: str = None):
|
||||
if not table_name or table_name not in db.tables:
|
||||
continue
|
||||
table = get_table(table_name)
|
||||
for obj in table.find(table.table.columns.uid.in_(uids)):
|
||||
clauses = [table.table.columns.uid.in_(uids)]
|
||||
if table.has_column("deleted_at"):
|
||||
clauses.append(table.table.columns.deleted_at.is_(None))
|
||||
for obj in table.find(*clauses):
|
||||
resolved[(target_type, obj["uid"])] = obj
|
||||
|
||||
items = []
|
||||
@@ -97,9 +100,17 @@ async def toggle_bookmark(request: Request, target_type: str, target_uid: str):
|
||||
existing = bookmarks.find_one(
|
||||
user_uid=user["uid"], target_uid=target_uid, target_type=target_type
|
||||
)
|
||||
if existing:
|
||||
bookmarks.delete(id=existing["id"])
|
||||
if existing and not existing.get("deleted_at"):
|
||||
bookmarks.update(
|
||||
{"id": existing["id"], "deleted_at": _now_iso(), "deleted_by": user["uid"]},
|
||||
["id"],
|
||||
)
|
||||
saved = False
|
||||
elif existing:
|
||||
bookmarks.update(
|
||||
{"id": existing["id"], "deleted_at": None, "deleted_by": None}, ["id"]
|
||||
)
|
||||
saved = True
|
||||
else:
|
||||
bookmarks.insert(
|
||||
{
|
||||
@@ -108,6 +119,8 @@ async def toggle_bookmark(request: Request, target_type: str, target_uid: str):
|
||||
"target_uid": target_uid,
|
||||
"target_type": target_type,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
}
|
||||
)
|
||||
saved = True
|
||||
|
||||
Reference in New Issue
Block a user