chore: document project-wide soft delete pattern and add deleted_by column to all tables
This commit is contained in:
@@ -222,6 +222,7 @@ def store_attachment(file_bytes, original_filename, user_uid):
|
||||
"thumbnail_name": thumbnail,
|
||||
"created_at": datetime.now(timezone.utc).isoformat(),
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
}
|
||||
)
|
||||
return {
|
||||
@@ -386,12 +387,17 @@ def delete_attachment(uid):
|
||||
_delete_attachment_row(row)
|
||||
|
||||
|
||||
def soft_delete_attachment(uid):
|
||||
def soft_delete_attachment(uid, deleted_by="system"):
|
||||
row = get_table("attachments").find_one(uid=uid)
|
||||
if not row or row.get("deleted_at"):
|
||||
return None
|
||||
get_table("attachments").update(
|
||||
{"uid": uid, "deleted_at": datetime.now(timezone.utc).isoformat()}, ["uid"]
|
||||
{
|
||||
"uid": uid,
|
||||
"deleted_at": datetime.now(timezone.utc).isoformat(),
|
||||
"deleted_by": deleted_by,
|
||||
},
|
||||
["uid"],
|
||||
)
|
||||
return row
|
||||
|
||||
@@ -400,10 +406,34 @@ def restore_attachment(uid):
|
||||
row = get_table("attachments").find_one(uid=uid)
|
||||
if not row or not row.get("deleted_at"):
|
||||
return False
|
||||
get_table("attachments").update({"uid": uid, "deleted_at": None}, ["uid"])
|
||||
get_table("attachments").update(
|
||||
{"uid": uid, "deleted_at": None, "deleted_by": None}, ["uid"]
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
def soft_delete_target_attachments(target_type, target_uid, deleted_by):
|
||||
stamp = datetime.now(timezone.utc).isoformat()
|
||||
for row in get_table("attachments").find(
|
||||
target_type=target_type, target_uid=target_uid, deleted_at=None
|
||||
):
|
||||
get_table("attachments").update(
|
||||
{"uid": row["uid"], "deleted_at": stamp, "deleted_by": deleted_by}, ["uid"]
|
||||
)
|
||||
|
||||
|
||||
def soft_delete_attachments_for(target_type, target_uids, deleted_by):
|
||||
from devplacepy.database import soft_delete_in
|
||||
|
||||
soft_delete_in(
|
||||
"attachments",
|
||||
"target_uid",
|
||||
target_uids,
|
||||
deleted_by,
|
||||
target_type=target_type,
|
||||
)
|
||||
|
||||
|
||||
def delete_target_attachments(target_type, target_uid):
|
||||
for row in get_table("attachments").find(
|
||||
target_type=target_type, target_uid=target_uid
|
||||
|
||||
Reference in New Issue
Block a user