8117253841
Phase 1 of the parent/child rollup feature. Self-FK on properties with ON DELETE RESTRICT, plus a CHECK that blocks self-reference at the DB level. Service-layer helpers (getDescendantIds, getAncestorIds, assertNoCycle) walk the tree via recursive CTEs and guard against cycles and cross-company parents. softDeleteProperty now refuses to delete a property with live children. No UI yet — readers and roll-up routes land in Phase 2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 lines
397 B
SQL
8 lines
397 B
SQL
-- A property cannot be its own parent. Deeper cycle prevention (e.g.
|
|
-- A→B→A) is enforced in the service layer because Postgres can't express
|
|
-- recursive CHECK constraints; the assertNoCycle helper in
|
|
-- src/lib/server/services/properties.ts walks ancestors before save.
|
|
ALTER TABLE "properties"
|
|
ADD CONSTRAINT "properties_parent_not_self"
|
|
CHECK (parent_id IS NULL OR parent_id <> id);
|