Files
RFP_Finanzen/prisma/migrations/202604071700_budget_accounts/migration.sql
2026-04-08 16:30:44 +02:00

85 lines
2.4 KiB
SQL

ALTER TABLE "users" ADD COLUMN "username" TEXT;
WITH ranked AS (
SELECT
id,
CASE
WHEN lower(regexp_replace(split_part(email, '@', 1), '[^a-zA-Z0-9_-]', '-', 'g')) = ''
THEN CONCAT('user-', substring(id from 1 for 6))
ELSE lower(regexp_replace(split_part(email, '@', 1), '[^a-zA-Z0-9_-]', '-', 'g'))
END AS base,
ROW_NUMBER() OVER (
PARTITION BY CASE
WHEN lower(regexp_replace(split_part(email, '@', 1), '[^a-zA-Z0-9_-]', '-', 'g')) = ''
THEN CONCAT('user-', substring(id from 1 for 6))
ELSE lower(regexp_replace(split_part(email, '@', 1), '[^a-zA-Z0-9_-]', '-', 'g'))
END
ORDER BY created_at, id
) AS rn
FROM "users"
)
UPDATE "users" AS u
SET "username" = CASE
WHEN ranked.rn = 1 THEN ranked.base
ELSE CONCAT(ranked.base, '-', ranked.rn)
END
FROM ranked
WHERE u.id = ranked.id;
ALTER TABLE "users" ALTER COLUMN "username" SET NOT NULL;
ALTER TABLE "users" ALTER COLUMN "email" DROP NOT NULL;
CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
CREATE TABLE "budgets" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"total_budget" DECIMAL(10,2) NOT NULL,
"color_code" TEXT NOT NULL,
"working_group_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "budgets_pkey" PRIMARY KEY ("id")
);
INSERT INTO "budgets" (
"id",
"name",
"total_budget",
"color_code",
"working_group_id",
"created_at",
"updated_at"
)
SELECT
CONCAT('budget_', "id"),
'Hauptbudget',
"total_budget",
"color_code",
"id",
"created_at",
"updated_at"
FROM "working_groups";
CREATE UNIQUE INDEX "budgets_working_group_id_name_key" ON "budgets"("working_group_id", "name");
ALTER TABLE "budgets"
ADD CONSTRAINT "budgets_working_group_id_fkey"
FOREIGN KEY ("working_group_id") REFERENCES "working_groups"("id")
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "expenses" RENAME COLUMN "notes" TO "description";
ALTER TABLE "expenses" ADD COLUMN "budget_id" TEXT;
UPDATE "expenses"
SET "budget_id" = CONCAT('budget_', "ag_id");
ALTER TABLE "expenses" ALTER COLUMN "budget_id" SET NOT NULL;
ALTER TABLE "expenses"
ADD CONSTRAINT "expenses_budget_id_fkey"
FOREIGN KEY ("budget_id") REFERENCES "budgets"("id")
ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE "working_groups" DROP COLUMN "total_budget";
ALTER TABLE "working_groups" DROP COLUMN "color_code";