Files
studio-auth-be/prisma/migrations/20260610090000_add_user_app_roles/migration.sql
T
2026-07-01 17:36:34 +09:00

41 lines
2.3 KiB
SQL

CREATE TABLE "user_app_roles" (
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
"user_id" uuid NOT NULL,
"app_key" text NOT NULL,
"role_code" text NOT NULL,
"assigned_by" uuid,
"assigned_at" timestamptz(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"starts_at" timestamptz(3),
"ends_at" timestamptz(3),
"created_at" timestamptz(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" timestamptz(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_app_roles_pkey" PRIMARY KEY ("id"),
CONSTRAINT "user_app_roles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE UNIQUE INDEX "user_app_roles_user_id_app_key_role_code_key" ON "user_app_roles"("user_id", "app_key", "role_code");
CREATE INDEX "user_app_roles_app_key_role_code_idx" ON "user_app_roles"("app_key", "role_code");
CREATE INDEX "user_app_roles_user_id_app_key_idx" ON "user_app_roles"("user_id", "app_key");
COMMENT ON TABLE "user_app_roles" IS '사용자별 앱 역할. 전역 계정 역할과 별도로 LMS 강사, 학생, ADS IDE 개발자 같은 앱 단위 역할을 관리한다.';
COMMENT ON COLUMN "user_app_roles"."id" IS '앱 역할 매핑 UUID';
COMMENT ON COLUMN "user_app_roles"."user_id" IS '역할을 부여받은 auth 사용자 ID';
COMMENT ON COLUMN "user_app_roles"."app_key" IS '역할이 적용되는 앱 식별자. 예: LMS, ADS IDE';
COMMENT ON COLUMN "user_app_roles"."role_code" IS '앱 내부 역할 코드. 예: INSTRUCTOR, STUDENT, DEVELOPER';
COMMENT ON COLUMN "user_app_roles"."assigned_by" IS '역할을 부여한 관리자 사용자 ID';
COMMENT ON COLUMN "user_app_roles"."assigned_at" IS '역할 부여 일시';
COMMENT ON COLUMN "user_app_roles"."starts_at" IS '역할 유효 시작 일시. NULL이면 즉시 유효';
COMMENT ON COLUMN "user_app_roles"."ends_at" IS '역할 유효 종료 일시. NULL이면 무기한';
COMMENT ON COLUMN "user_app_roles"."created_at" IS '생성 일시';
COMMENT ON COLUMN "user_app_roles"."updated_at" IS '수정 일시';
INSERT INTO "user_app_roles" ("user_id", "app_key", "role_code")
SELECT "id", 'LMS', 'INSTRUCTOR'
FROM "users"
WHERE "email" IN ('teacher@futuredrive.net', 'teacher@yu.ac.kr')
ON CONFLICT ("user_id", "app_key", "role_code") DO NOTHING;
UPDATE "users"
SET "role" = 'USER'
WHERE "email" IN ('teacher@futuredrive.net', 'teacher@yu.ac.kr');