41 lines
2.3 KiB
SQL
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');
|