commit
This commit is contained in:
103
drizzle/0003_unify_users_training.sql
Normal file
103
drizzle/0003_unify_users_training.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
ALTER TABLE "users" ADD COLUMN "employee_code" text;--> statement-breakpoint
|
||||
ALTER TABLE "users" ADD COLUMN "department_id" integer;--> statement-breakpoint
|
||||
ALTER TABLE "users" ADD COLUMN "position_id" integer;--> statement-breakpoint
|
||||
ALTER TABLE "users" ADD COLUMN "company_name" text;--> statement-breakpoint
|
||||
ALTER TABLE "users" ADD COLUMN "hired_at" timestamp with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "training_records" ADD COLUMN "user_id" text;--> statement-breakpoint
|
||||
|
||||
UPDATE "users" AS "u"
|
||||
SET
|
||||
"employee_code" = "e"."employee_code",
|
||||
"department_id" = "e"."department_id",
|
||||
"position_id" = "e"."position_id",
|
||||
"company_name" = COALESCE("e"."company", "o"."name"),
|
||||
"hired_at" = "e"."hired_at",
|
||||
"updated_at" = NOW()
|
||||
FROM "employees" AS "e"
|
||||
INNER JOIN "organizations" AS "o" ON "o"."id" = "e"."organization_id"
|
||||
WHERE "u"."email" IS NOT NULL
|
||||
AND "e"."email" IS NOT NULL
|
||||
AND LOWER("u"."email") = LOWER("e"."email");--> statement-breakpoint
|
||||
|
||||
INSERT INTO "users" (
|
||||
"id",
|
||||
"name",
|
||||
"email",
|
||||
"password_hash",
|
||||
"system_role",
|
||||
"is_active",
|
||||
"employee_code",
|
||||
"department_id",
|
||||
"position_id",
|
||||
"company_name",
|
||||
"hired_at",
|
||||
"active_organization_id"
|
||||
)
|
||||
SELECT
|
||||
CONCAT('legacy-employee-', "e"."id", '-', "e"."organization_id") AS "id",
|
||||
"e"."full_name",
|
||||
COALESCE(LOWER("e"."email"), CONCAT('employee-', "e"."id", '@training-system.local')),
|
||||
'$2b$10$sl8.hKi0l/KXnouzGgiRvOpNgZ9TT8RFvdPjQbgxCV5WirdWv1uBq',
|
||||
'standard',
|
||||
false,
|
||||
"e"."employee_code",
|
||||
"e"."department_id",
|
||||
"e"."position_id",
|
||||
COALESCE("e"."company", "o"."name"),
|
||||
"e"."hired_at",
|
||||
"e"."organization_id"
|
||||
FROM "employees" AS "e"
|
||||
INNER JOIN "organizations" AS "o" ON "o"."id" = "e"."organization_id"
|
||||
LEFT JOIN "users" AS "u"
|
||||
ON (
|
||||
("e"."email" IS NOT NULL AND LOWER("u"."email") = LOWER("e"."email"))
|
||||
OR ("u"."employee_code" IS NOT NULL AND "u"."employee_code" = "e"."employee_code")
|
||||
)
|
||||
WHERE "u"."id" IS NULL;--> statement-breakpoint
|
||||
|
||||
INSERT INTO "memberships" (
|
||||
"id",
|
||||
"user_id",
|
||||
"organization_id",
|
||||
"role",
|
||||
"permissions"
|
||||
)
|
||||
SELECT
|
||||
CONCAT('legacy-membership-', "e"."id", '-', "e"."organization_id"),
|
||||
CONCAT('legacy-employee-', "e"."id", '-', "e"."organization_id"),
|
||||
"e"."organization_id",
|
||||
'member',
|
||||
ARRAY['products:read']::text[]
|
||||
FROM "employees" AS "e"
|
||||
LEFT JOIN "memberships" AS "m"
|
||||
ON "m"."user_id" = CONCAT('legacy-employee-', "e"."id", '-', "e"."organization_id")
|
||||
AND "m"."organization_id" = "e"."organization_id"
|
||||
WHERE "m"."id" IS NULL
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM "users" AS "u"
|
||||
WHERE "u"."id" = CONCAT('legacy-employee-', "e"."id", '-', "e"."organization_id")
|
||||
);--> statement-breakpoint
|
||||
|
||||
UPDATE "training_records" AS "tr"
|
||||
SET "user_id" = COALESCE(
|
||||
(
|
||||
SELECT "u"."id"
|
||||
FROM "users" AS "u"
|
||||
INNER JOIN "employees" AS "e" ON LOWER("u"."email") = LOWER("e"."email")
|
||||
WHERE "e"."id" = "tr"."employee_id"
|
||||
LIMIT 1
|
||||
),
|
||||
CONCAT(
|
||||
'legacy-employee-',
|
||||
"tr"."employee_id",
|
||||
'-',
|
||||
"tr"."organization_id"
|
||||
)
|
||||
)
|
||||
WHERE "tr"."user_id" IS NULL;--> statement-breakpoint
|
||||
|
||||
ALTER TABLE "training_records" ALTER COLUMN "user_id" SET NOT NULL;--> statement-breakpoint
|
||||
ALTER TABLE "training_records" ADD CONSTRAINT "training_records_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||||
ALTER TABLE "training_records" DROP CONSTRAINT "training_records_employee_id_employees_id_fk";--> statement-breakpoint
|
||||
ALTER TABLE "training_records" ADD CONSTRAINT "training_records_employee_id_employees_id_fk" FOREIGN KEY ("employee_id") REFERENCES "public"."employees"("id") ON DELETE set null ON UPDATE no action;
|
||||
Reference in New Issue
Block a user