Update data model: flat proclamation groups, drop subscription levels; allow profile/license key without user
This commit is contained in:
+81
@@ -0,0 +1,81 @@
|
||||
-- Flatten ProclamationCategory hierarchy into a flat list, introduce
|
||||
-- ProclamationGroup (formerly child sub-categories), and remove
|
||||
-- SubscriptionLevel entirely.
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ProclamationGroup" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "ProclamationGroup_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ProclamationGroup_name_key" ON "ProclamationGroup"("name");
|
||||
|
||||
-- Seed groups from every distinct former sub-category name
|
||||
INSERT INTO "ProclamationGroup" ("name", "sortOrder")
|
||||
SELECT "name",
|
||||
ROW_NUMBER() OVER (ORDER BY "name") - 1
|
||||
FROM (
|
||||
SELECT DISTINCT "name" FROM "ProclamationCategory" WHERE "parentId" IS NOT NULL
|
||||
) AS d;
|
||||
|
||||
-- AddColumn (nullable during backfill)
|
||||
ALTER TABLE "Proclamation" ADD COLUMN "groupId" INTEGER;
|
||||
|
||||
-- Backfill: former child categories become the proclamation's group; the
|
||||
-- parent becomes its flat category.
|
||||
UPDATE "Proclamation" AS p
|
||||
SET "groupId" = g."id",
|
||||
"categoryId" = c."parentId"
|
||||
FROM "ProclamationCategory" AS c
|
||||
JOIN "ProclamationGroup" AS g ON g."name" = c."name"
|
||||
WHERE p."categoryId" = c."id" AND c."parentId" IS NOT NULL;
|
||||
|
||||
-- Backfill: proclamations that had no group (e.g. 'Custom (Client Specific)')
|
||||
-- default to the General group, if it exists.
|
||||
UPDATE "Proclamation"
|
||||
SET "groupId" = (SELECT "id" FROM "ProclamationGroup" WHERE "name" = 'General')
|
||||
WHERE "groupId" IS NULL;
|
||||
|
||||
-- Safety net: any proclamation still unmapped takes the first group.
|
||||
UPDATE "Proclamation"
|
||||
SET "groupId" = (SELECT "id" FROM "ProclamationGroup" ORDER BY "sortOrder" LIMIT 1)
|
||||
WHERE "groupId" IS NULL;
|
||||
|
||||
ALTER TABLE "Proclamation" ALTER COLUMN "groupId" SET NOT NULL;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Proclamation" ADD CONSTRAINT "Proclamation_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "ProclamationGroup"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- Remove former child categories (subscription-level join rows cascade)
|
||||
DELETE FROM "ProclamationCategory" WHERE "parentId" IS NOT NULL;
|
||||
|
||||
-- Drop self-relation
|
||||
ALTER TABLE "ProclamationCategory" DROP CONSTRAINT "ProclamationCategory_parentId_fkey";
|
||||
|
||||
-- DropIndex
|
||||
DROP INDEX "ProclamationCategory_parentId_name_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "ProclamationCategory" DROP COLUMN "parentId";
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ProclamationCategory_name_key" ON "ProclamationCategory"("name");
|
||||
|
||||
-- Remove subscription levels entirely
|
||||
DROP TABLE "ProclamationCategorySubscriptionLevel";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "Proclamation" DROP CONSTRAINT "Proclamation_subscriptionLevelId_fkey";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Proclamation" DROP COLUMN "subscriptionLevelId";
|
||||
|
||||
-- DropTable
|
||||
DROP TABLE "SubscriptionLevel";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "LicenseKey" DROP COLUMN "level";
|
||||
@@ -0,0 +1,28 @@
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "LicenseKey" DROP CONSTRAINT "LicenseKey_userId_fkey";
|
||||
|
||||
-- DropIndex
|
||||
DROP INDEX "Profile_userId_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "LicenseKey" ADD COLUMN "email" TEXT,
|
||||
ALTER COLUMN "userId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Profile" ADD COLUMN "email" TEXT,
|
||||
ALTER COLUMN "userId" DROP NOT NULL;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "LicenseKey_userId_idx" ON "LicenseKey"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "LicenseKey_email_idx" ON "LicenseKey"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Profile_userId_idx" ON "Profile"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Profile_email_idx" ON "Profile"("email");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LicenseKey" ADD CONSTRAINT "LicenseKey_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user