85 lines
2.4 KiB
SQL
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";
|