36 lines
1.1 KiB
SQL
36 lines
1.1 KiB
SQL
-- Multi-assignee support for activities (implicit many-to-many)
|
|
CREATE TABLE IF NOT EXISTS "_ActivityAssignees" (
|
|
"A" TEXT NOT NULL,
|
|
"B" TEXT NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "_ActivityAssignees_AB_unique" ON "_ActivityAssignees"("A", "B");
|
|
CREATE INDEX IF NOT EXISTS "_ActivityAssignees_B_index" ON "_ActivityAssignees"("B");
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint WHERE conname = '_ActivityAssignees_A_fkey'
|
|
) THEN
|
|
ALTER TABLE "_ActivityAssignees"
|
|
ADD CONSTRAINT "_ActivityAssignees_A_fkey"
|
|
FOREIGN KEY ("A") REFERENCES "Activity"("id")
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint WHERE conname = '_ActivityAssignees_B_fkey'
|
|
) THEN
|
|
ALTER TABLE "_ActivityAssignees"
|
|
ADD CONSTRAINT "_ActivityAssignees_B_fkey"
|
|
FOREIGN KEY ("B") REFERENCES "User"("id")
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Backfill from legacy single assigneeId
|
|
INSERT INTO "_ActivityAssignees" ("A", "B")
|
|
SELECT a."id", a."assigneeId"
|
|
FROM "Activity" a
|
|
WHERE a."assigneeId" IS NOT NULL
|
|
ON CONFLICT DO NOTHING;
|