# retoor from .core import _now_iso, datetime, db, get_table, timezone from .soft_delete import soft_delete def record_fork( source_project_uid: str, forked_project_uid: str, forked_by_uid: str ) -> None: from devplacepy.utils import generate_uid get_table("project_forks").insert( { "uid": generate_uid(), "source_project_uid": source_project_uid, "forked_project_uid": forked_project_uid, "forked_by_uid": forked_by_uid, "created_at": datetime.now(timezone.utc).isoformat(), "deleted_at": None, "deleted_by": None, } ) def get_fork_parent(forked_project_uid: str) -> dict | None: if "project_forks" not in db.tables: return None relation = get_table("project_forks").find_one( forked_project_uid=forked_project_uid, deleted_at=None ) if not relation: return None return get_table("projects").find_one( uid=relation["source_project_uid"], deleted_at=None ) def count_forks(source_project_uid: str) -> int: if "project_forks" not in db.tables: return 0 return get_table("project_forks").count( source_project_uid=source_project_uid, deleted_at=None ) def soft_delete_fork_relations(project_uid: str, deleted_by: str) -> None: if "project_forks" not in db.tables: return stamp = _now_iso() soft_delete("project_forks", deleted_by, stamp=stamp, forked_project_uid=project_uid) soft_delete("project_forks", deleted_by, stamp=stamp, source_project_uid=project_uid) def delete_fork_relations(project_uid: str) -> None: if "project_forks" not in db.tables: return forks = get_table("project_forks") forks.delete(forked_project_uid=project_uid) forks.delete(source_project_uid=project_uid)