Files
appointment-booking-software/migrations/0000_big_ultimatum.sql
T

76 lines
3.5 KiB
SQL

CREATE TYPE "public"."config_type" AS ENUM('BOOLEAN', 'NUMBER', 'STRING');--> statement-breakpoint
CREATE TYPE "public"."user_role" AS ENUM('GLOBAL_ADMIN', 'TENANT_ADMIN', 'STAFF');--> statement-breakpoint
CREATE TABLE "tenant" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"short_name" text NOT NULL,
"long_name" text NOT NULL,
"description" text,
"logo" "bytea",
"database_url" text NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "tenant_short_name_unique" UNIQUE("short_name")
);
--> statement-breakpoint
CREATE TABLE "tenant_config" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"tenant_id" uuid NOT NULL,
"name" text NOT NULL,
"type" "config_type" NOT NULL,
"value" text NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE "user" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"email" text NOT NULL,
"name" text NOT NULL,
"role" "user_role" DEFAULT 'GLOBAL_ADMIN' NOT NULL,
"tenant_id" uuid,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"last_login_at" timestamp,
"is_active" boolean DEFAULT true,
"confirmed" boolean DEFAULT false,
"token" text,
"token_valid_until" timestamp,
CONSTRAINT "user_email_unique" UNIQUE("email")
);
--> statement-breakpoint
CREATE TABLE "user_passkey" (
"id" text PRIMARY KEY NOT NULL,
"user_id" uuid NOT NULL,
"public_key" text NOT NULL,
"counter" integer DEFAULT 0 NOT NULL,
"device_name" text,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"last_used_at" timestamp
);
--> statement-breakpoint
CREATE TABLE "user_session" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"user_id" uuid NOT NULL,
"session_token" text NOT NULL,
"access_token" text NOT NULL,
"refresh_token" text NOT NULL,
"ip_address" text,
"user_agent" text,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"expires_at" timestamp NOT NULL,
"last_used_at" timestamp DEFAULT now(),
CONSTRAINT "user_session_session_token_unique" UNIQUE("session_token")
);
--> statement-breakpoint
ALTER TABLE "tenant_config" ADD CONSTRAINT "tenant_config_tenant_id_tenant_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenant"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "user" ADD CONSTRAINT "user_tenant_id_tenant_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenant"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "user_passkey" ADD CONSTRAINT "user_passkey_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "user_session" ADD CONSTRAINT "user_session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE UNIQUE INDEX "tenant_database_url_idx" ON "tenant" USING btree ("database_url");--> statement-breakpoint
CREATE UNIQUE INDEX "tenant_config_tenant_name_idx" ON "tenant_config" USING btree ("tenant_id","name");--> statement-breakpoint
CREATE UNIQUE INDEX "user_email_idx" ON "user" USING btree ("email");--> statement-breakpoint
CREATE INDEX "user_passkey_user_idx" ON "user_passkey" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX "user_session_user_idx" ON "user_session" USING btree ("user_id");--> statement-breakpoint
CREATE UNIQUE INDEX "user_session_token_idx" ON "user_session" USING btree ("session_token");