mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-11-09 00:22:38 -06:00
One row per project and each ancestor including itself, so the tree resolves with a join instead of a recursive walk. CreateProject inserts the chain, UpdateProject re-links the subtree on a parent change and Project.Delete drops the rows; the relink reads take FOR UPDATE so concurrent reparents of overlapping subtrees serialize, and a project without its self row fails loudly instead of silently losing access. Descendant archiving reads from the table. RepairOrphanedProjects rebuilds the whole table so drift and rows of deleted projects go away.