init studio auth backend
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
CREATE TYPE "LicenseCode" AS ENUM ('FREE', 'EDUCATION', 'PROFESSIONAL');
|
||||
|
||||
CREATE TABLE "licenses" (
|
||||
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
|
||||
"code" "LicenseCode" NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"is_active" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "licenses_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "user_licenses" (
|
||||
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
|
||||
"user_id" UUID NOT NULL,
|
||||
"license_id" UUID NOT NULL,
|
||||
"starts_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"expires_at" TIMESTAMP(3),
|
||||
"assigned_by" UUID,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "user_licenses_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "licenses_code_key" ON "licenses"("code");
|
||||
CREATE INDEX "licenses_is_active_idx" ON "licenses"("is_active");
|
||||
CREATE INDEX "user_licenses_user_id_starts_at_idx" ON "user_licenses"("user_id", "starts_at");
|
||||
CREATE INDEX "user_licenses_license_id_idx" ON "user_licenses"("license_id");
|
||||
|
||||
ALTER TABLE "user_licenses" ADD CONSTRAINT "user_licenses_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ALTER TABLE "user_licenses" ADD CONSTRAINT "user_licenses_license_id_fkey" FOREIGN KEY ("license_id") REFERENCES "licenses"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
INSERT INTO "licenses" ("code", "name", "description", "updated_at")
|
||||
VALUES
|
||||
('FREE', 'Free', '기본 무료 라이선스', CURRENT_TIMESTAMP),
|
||||
('EDUCATION', 'Education', '교육기관용 라이선스', CURRENT_TIMESTAMP),
|
||||
('PROFESSIONAL', 'Professional', '전문가용 라이선스', CURRENT_TIMESTAMP);
|
||||
|
||||
INSERT INTO "user_licenses" ("user_id", "license_id", "starts_at")
|
||||
SELECT u."id", l."id", CURRENT_TIMESTAMP
|
||||
FROM "users" u
|
||||
CROSS JOIN "licenses" l
|
||||
WHERE l."code" = 'PROFESSIONAL'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM "user_licenses" ul
|
||||
WHERE ul."user_id" = u."id"
|
||||
);
|
||||
|
||||
COMMENT ON TYPE "LicenseCode" IS '라이선스 코드. 무료, 교육용, 전문가용 플랜을 구분한다.';
|
||||
COMMENT ON TABLE "licenses" IS 'Autonomy Studio 라이선스 마스터. 플랜 코드와 표시명을 관리한다.';
|
||||
COMMENT ON COLUMN "licenses"."id" IS '라이선스 UUID.';
|
||||
COMMENT ON COLUMN "licenses"."code" IS '라이선스 코드.';
|
||||
COMMENT ON COLUMN "licenses"."name" IS '화면에 표시할 라이선스명.';
|
||||
COMMENT ON COLUMN "licenses"."description" IS '라이선스 설명.';
|
||||
COMMENT ON COLUMN "licenses"."is_active" IS '라이선스 사용 가능 여부.';
|
||||
COMMENT ON COLUMN "licenses"."created_at" IS '라이선스 생성 시각.';
|
||||
COMMENT ON COLUMN "licenses"."updated_at" IS '라이선스 수정 시각.';
|
||||
COMMENT ON TABLE "user_licenses" IS '사용자별 라이선스 부여 이력. 현재 유효 라이선스와 기간을 관리한다.';
|
||||
COMMENT ON COLUMN "user_licenses"."id" IS '사용자 라이선스 UUID.';
|
||||
COMMENT ON COLUMN "user_licenses"."user_id" IS '라이선스를 부여받은 사용자 UUID.';
|
||||
COMMENT ON COLUMN "user_licenses"."license_id" IS '부여된 라이선스 UUID.';
|
||||
COMMENT ON COLUMN "user_licenses"."starts_at" IS '라이선스 시작 시각.';
|
||||
COMMENT ON COLUMN "user_licenses"."expires_at" IS '라이선스 만료 시각. NULL이면 무기한.';
|
||||
COMMENT ON COLUMN "user_licenses"."assigned_by" IS '라이선스를 부여한 관리자 UUID.';
|
||||
COMMENT ON COLUMN "user_licenses"."created_at" IS '라이선스 부여 이력 생성 시각.';
|
||||
Reference in New Issue
Block a user