322 lines
15 KiB
MySQL
322 lines
15 KiB
MySQL
|
|
CREATE TYPE "public"."booking_status" AS ENUM('pending', 'confirmed', 'rejected');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."domain_verification_status" AS ENUM('pending', 'verified', 'failed');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."navigation_area" AS ENUM('main', 'footer_1', 'footer_2', 'footer_3', 'footer_4');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."news_lifecycle_status" AS ENUM('draft', 'scheduled', 'published', 'archived');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."news_source" AS ENUM('native', 'imported');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."news_status" AS ENUM('draft', 'published');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."role_scope" AS ENUM('platform', 'tenant');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."tenant_domain_type" AS ENUM('subdomain', 'custom');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."tenant_member_role" AS ENUM('admin', 'tenant_admin', 'editor', 'haus_admin', 'member_manager', 'member', 'verband_admin', 'landes_admin');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."tenant_status" AS ENUM('active', 'disabled');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."user_role" AS ENUM('admin', 'redaktion', 'gruppenleitung', 'hausverwaltung');--> statement-breakpoint
|
||
|
|
CREATE TYPE "public"."visibility" AS ENUM('public', 'members');--> statement-breakpoint
|
||
|
|
CREATE TABLE "account" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"accountId" text NOT NULL,
|
||
|
|
"providerId" text NOT NULL,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
"accessToken" text,
|
||
|
|
"refreshToken" text,
|
||
|
|
"idToken" text,
|
||
|
|
"accessTokenExpiresAt" timestamp,
|
||
|
|
"refreshTokenExpiresAt" timestamp,
|
||
|
|
"scope" text,
|
||
|
|
"password" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "passkey" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"name" text,
|
||
|
|
"publicKey" text NOT NULL,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
"credentialID" text NOT NULL,
|
||
|
|
"counter" integer NOT NULL,
|
||
|
|
"deviceType" text NOT NULL,
|
||
|
|
"backedUp" boolean NOT NULL,
|
||
|
|
"transports" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"aaguid" text
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "session" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"expiresAt" timestamp NOT NULL,
|
||
|
|
"token" text NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"ipAddress" text,
|
||
|
|
"userAgent" text,
|
||
|
|
"impersonatedBy" text,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
CONSTRAINT "session_token_unique" UNIQUE("token")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "twoFactor" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
"secret" text NOT NULL,
|
||
|
|
"backupCodes" text NOT NULL,
|
||
|
|
"enabled" boolean DEFAULT true NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "user" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"name" text NOT NULL,
|
||
|
|
"email" text NOT NULL,
|
||
|
|
"role" text DEFAULT 'tenant_member' NOT NULL,
|
||
|
|
"twoFactorEnabled" boolean DEFAULT false NOT NULL,
|
||
|
|
"twoFactorRecoveryRequired" boolean DEFAULT false NOT NULL,
|
||
|
|
"twoFactorRecoveryStartedAt" timestamp,
|
||
|
|
"twoFactorRecoveryStartedBy" text,
|
||
|
|
"banned" boolean DEFAULT false NOT NULL,
|
||
|
|
"banReason" text,
|
||
|
|
"banExpires" timestamp,
|
||
|
|
"emailVerified" boolean DEFAULT false NOT NULL,
|
||
|
|
"image" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
CONSTRAINT "user_email_unique" UNIQUE("email")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "verification" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"identifier" text NOT NULL,
|
||
|
|
"value" text NOT NULL,
|
||
|
|
"expiresAt" timestamp NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now(),
|
||
|
|
"updatedAt" timestamp DEFAULT now()
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "events" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text,
|
||
|
|
"groupId" text,
|
||
|
|
"responsibleUserId" text,
|
||
|
|
"title" text NOT NULL,
|
||
|
|
"slug" text,
|
||
|
|
"description" text,
|
||
|
|
"startDate" timestamp NOT NULL,
|
||
|
|
"startTime" text,
|
||
|
|
"endDate" timestamp,
|
||
|
|
"endTime" text,
|
||
|
|
"location" text,
|
||
|
|
"published" boolean DEFAULT false NOT NULL,
|
||
|
|
"visibility" "visibility" DEFAULT 'public' NOT NULL,
|
||
|
|
"printYear" integer,
|
||
|
|
"isPrintable" boolean DEFAULT false NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "groups" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text,
|
||
|
|
"code" text NOT NULL,
|
||
|
|
"name" text NOT NULL,
|
||
|
|
"description" text,
|
||
|
|
"sortOrder" integer DEFAULT 0 NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "houseBookings" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"houseId" text NOT NULL,
|
||
|
|
"startDate" timestamp NOT NULL,
|
||
|
|
"endDate" timestamp NOT NULL,
|
||
|
|
"bookingType" text DEFAULT 'private' NOT NULL,
|
||
|
|
"title" text,
|
||
|
|
"description" text,
|
||
|
|
"internalNotes" text,
|
||
|
|
"status" text DEFAULT 'confirmed' NOT NULL,
|
||
|
|
"isPublic" boolean DEFAULT true NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "houses" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"name" text NOT NULL,
|
||
|
|
"description" text,
|
||
|
|
"ownerOrganization" text,
|
||
|
|
"lesseeTenantId" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "members" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text NOT NULL,
|
||
|
|
"userId" text,
|
||
|
|
"firstName" text NOT NULL,
|
||
|
|
"lastName" text NOT NULL,
|
||
|
|
"email" text,
|
||
|
|
"phone" text,
|
||
|
|
"mobile" text,
|
||
|
|
"street" text,
|
||
|
|
"postalCode" text,
|
||
|
|
"city" text,
|
||
|
|
"isNaturfreund" boolean DEFAULT true NOT NULL,
|
||
|
|
"hadOldWebsiteAccess" boolean DEFAULT false NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "news" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text,
|
||
|
|
"title" text NOT NULL,
|
||
|
|
"slug" text NOT NULL,
|
||
|
|
"teaser" text,
|
||
|
|
"content" text,
|
||
|
|
"coverImage" text,
|
||
|
|
"source" "news_source" DEFAULT 'native' NOT NULL,
|
||
|
|
"lifecycleStatus" "news_lifecycle_status" DEFAULT 'draft' NOT NULL,
|
||
|
|
"isPinned" boolean DEFAULT false NOT NULL,
|
||
|
|
"archivedAt" timestamp,
|
||
|
|
"status" "news_status" DEFAULT 'draft' NOT NULL,
|
||
|
|
"visibility" "visibility" DEFAULT 'public' NOT NULL,
|
||
|
|
"publishedAt" timestamp,
|
||
|
|
"authorId" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
CONSTRAINT "news_slug_unique" UNIQUE("slug")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "permissions" (
|
||
|
|
"key" text PRIMARY KEY NOT NULL,
|
||
|
|
"label" text NOT NULL,
|
||
|
|
"category" text NOT NULL,
|
||
|
|
"description" text,
|
||
|
|
"sortOrder" integer DEFAULT 0 NOT NULL,
|
||
|
|
"isPlatformOnly" boolean DEFAULT false NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "role_permissions" (
|
||
|
|
"roleId" text NOT NULL,
|
||
|
|
"permissionKey" text NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
CONSTRAINT "role_permissions_roleId_permissionKey_pk" PRIMARY KEY("roleId","permissionKey")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "roles" (
|
||
|
|
"roleId" text PRIMARY KEY NOT NULL,
|
||
|
|
"scope" "role_scope" NOT NULL,
|
||
|
|
"tenantId" text,
|
||
|
|
"name" text NOT NULL,
|
||
|
|
"description" text,
|
||
|
|
"isEditable" boolean DEFAULT true NOT NULL,
|
||
|
|
"isSystem" boolean DEFAULT false NOT NULL,
|
||
|
|
"basedOnRoleId" text,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "user_role_assignments" (
|
||
|
|
"assignmentId" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text NOT NULL,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
"roleId" text NOT NULL,
|
||
|
|
"validFrom" timestamp,
|
||
|
|
"validTo" timestamp,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "tenant_pages" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text,
|
||
|
|
"title" text NOT NULL,
|
||
|
|
"slug" text NOT NULL,
|
||
|
|
"parentPageId" text,
|
||
|
|
"sortOrder" integer DEFAULT 0 NOT NULL,
|
||
|
|
"content" text,
|
||
|
|
"lifecycleStatus" "news_lifecycle_status" DEFAULT 'draft' NOT NULL,
|
||
|
|
"status" "news_status" DEFAULT 'draft' NOT NULL,
|
||
|
|
"visibility" "visibility" DEFAULT 'public' NOT NULL,
|
||
|
|
"publishedAt" timestamp,
|
||
|
|
"archivedAt" timestamp,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "tenant_navigation_items" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text NOT NULL,
|
||
|
|
"area" "navigation_area" NOT NULL,
|
||
|
|
"pageId" text,
|
||
|
|
"label" text,
|
||
|
|
"sortOrder" integer DEFAULT 0 NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "tenant_domains" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"tenantId" text NOT NULL,
|
||
|
|
"hostname" text NOT NULL,
|
||
|
|
"type" "tenant_domain_type" NOT NULL,
|
||
|
|
"verificationStatus" "domain_verification_status" DEFAULT 'pending' NOT NULL,
|
||
|
|
"verificationToken" text NOT NULL,
|
||
|
|
"verificationCheckedAt" timestamp,
|
||
|
|
"verifiedAt" timestamp,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "tenant_members" (
|
||
|
|
"tenantId" text NOT NULL,
|
||
|
|
"userId" text NOT NULL,
|
||
|
|
"role" "tenant_member_role" DEFAULT 'member' NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
CONSTRAINT "tenant_members_tenantId_userId_pk" PRIMARY KEY("tenantId","userId")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE "tenants" (
|
||
|
|
"id" text PRIMARY KEY NOT NULL,
|
||
|
|
"parentTenantId" text,
|
||
|
|
"slug" text NOT NULL,
|
||
|
|
"name" text NOT NULL,
|
||
|
|
"description" text,
|
||
|
|
"status" "tenant_status" DEFAULT 'active' NOT NULL,
|
||
|
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updatedAt" timestamp DEFAULT now() NOT NULL,
|
||
|
|
CONSTRAINT "tenants_slug_unique" UNIQUE("slug")
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
ALTER TABLE "account" ADD CONSTRAINT "account_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "passkey" ADD CONSTRAINT "passkey_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "session" ADD CONSTRAINT "session_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "twoFactor" ADD CONSTRAINT "twoFactor_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "events" ADD CONSTRAINT "events_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "events" ADD CONSTRAINT "events_groupId_groups_id_fk" FOREIGN KEY ("groupId") REFERENCES "public"."groups"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "events" ADD CONSTRAINT "events_responsibleUserId_user_id_fk" FOREIGN KEY ("responsibleUserId") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "groups" ADD CONSTRAINT "groups_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "houseBookings" ADD CONSTRAINT "houseBookings_houseId_houses_id_fk" FOREIGN KEY ("houseId") REFERENCES "public"."houses"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "houses" ADD CONSTRAINT "houses_lesseeTenantId_tenants_id_fk" FOREIGN KEY ("lesseeTenantId") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "members" ADD CONSTRAINT "members_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "members" ADD CONSTRAINT "members_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "news" ADD CONSTRAINT "news_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "news" ADD CONSTRAINT "news_authorId_user_id_fk" FOREIGN KEY ("authorId") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_roleId_roles_roleId_fk" FOREIGN KEY ("roleId") REFERENCES "public"."roles"("roleId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_permissionKey_permissions_key_fk" FOREIGN KEY ("permissionKey") REFERENCES "public"."permissions"("key") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "roles" ADD CONSTRAINT "roles_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "user_role_assignments" ADD CONSTRAINT "user_role_assignments_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "user_role_assignments" ADD CONSTRAINT "user_role_assignments_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "user_role_assignments" ADD CONSTRAINT "user_role_assignments_roleId_roles_roleId_fk" FOREIGN KEY ("roleId") REFERENCES "public"."roles"("roleId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_pages" ADD CONSTRAINT "tenant_pages_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_navigation_items" ADD CONSTRAINT "tenant_navigation_items_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_navigation_items" ADD CONSTRAINT "tenant_navigation_items_pageId_tenant_pages_id_fk" FOREIGN KEY ("pageId") REFERENCES "public"."tenant_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_domains" ADD CONSTRAINT "tenant_domains_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_members" ADD CONSTRAINT "tenant_members_tenantId_tenants_id_fk" FOREIGN KEY ("tenantId") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
ALTER TABLE "tenant_members" ADD CONSTRAINT "tenant_members_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "user_role_assignments_tenant_user_role_unique" ON "user_role_assignments" USING btree ("tenantId","userId","roleId");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "tenant_pages_tenant_slug_unique" ON "tenant_pages" USING btree ("tenantId","slug");--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX "tenant_domains_hostname_unique" ON "tenant_domains" USING btree ("hostname");
|