Initial commit: PodcastYes — AI podcast platform
This commit is contained in:
@@ -0,0 +1,545 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "EpisodeStatus" AS ENUM ('DRAFT', 'QUEUED', 'SCRIPTING', 'SYNTHESIZING', 'STITCHING', 'ART', 'SAVING', 'READY', 'FAILED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "EpisodeFormat" AS ENUM ('SOLO', 'INTERVIEW', 'MULTI_HOST');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "user" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"emailVerified" BOOLEAN NOT NULL DEFAULT false,
|
||||
"image" TEXT,
|
||||
"role" TEXT DEFAULT 'user',
|
||||
"banned" BOOLEAN DEFAULT false,
|
||||
"banReason" TEXT,
|
||||
"banExpires" TIMESTAMP(3),
|
||||
"stripeCustomerId" TEXT,
|
||||
"paypalPayerId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "user_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "session" (
|
||||
"id" TEXT NOT NULL,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"ipAddress" TEXT,
|
||||
"userAgent" TEXT,
|
||||
"activeOrganizationId" TEXT,
|
||||
"impersonatedBy" TEXT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "session_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "account" (
|
||||
"id" TEXT NOT NULL,
|
||||
"accountId" TEXT NOT NULL,
|
||||
"providerId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"accessToken" TEXT,
|
||||
"refreshToken" TEXT,
|
||||
"idToken" TEXT,
|
||||
"accessTokenExpiresAt" TIMESTAMP(3),
|
||||
"refreshTokenExpiresAt" TIMESTAMP(3),
|
||||
"scope" TEXT,
|
||||
"password" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "account_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "verification" (
|
||||
"id" TEXT NOT NULL,
|
||||
"identifier" TEXT NOT NULL,
|
||||
"value" TEXT NOT NULL,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "verification_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "organization" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"slug" TEXT,
|
||||
"logo" TEXT,
|
||||
"metadata" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "organization_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "member" (
|
||||
"id" TEXT NOT NULL,
|
||||
"organizationId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"teamId" TEXT,
|
||||
"role" TEXT NOT NULL DEFAULT 'member',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "member_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "invitation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"organizationId" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"role" TEXT,
|
||||
"teamId" TEXT,
|
||||
"status" TEXT NOT NULL DEFAULT 'pending',
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"inviterId" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "invitation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "team" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"organizationId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "team_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "org_branding" (
|
||||
"organizationId" TEXT NOT NULL,
|
||||
"brandName" TEXT,
|
||||
"primaryColor" TEXT,
|
||||
"logoUrl" TEXT,
|
||||
"customDomain" TEXT,
|
||||
"removePoweredBy" BOOLEAN NOT NULL DEFAULT false,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "org_branding_pkey" PRIMARY KEY ("organizationId")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "subscription" (
|
||||
"id" TEXT NOT NULL,
|
||||
"plan" TEXT NOT NULL,
|
||||
"referenceId" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"provider" TEXT NOT NULL DEFAULT 'stripe',
|
||||
"billingInterval" TEXT,
|
||||
"seats" INTEGER,
|
||||
"stripeCustomerId" TEXT,
|
||||
"stripeSubscriptionId" TEXT,
|
||||
"paypalSubscriptionId" TEXT,
|
||||
"paypalPlanId" TEXT,
|
||||
"periodStart" TIMESTAMP(3),
|
||||
"periodEnd" TIMESTAMP(3),
|
||||
"cancelAtPeriodEnd" BOOLEAN DEFAULT false,
|
||||
"trialStart" TIMESTAMP(3),
|
||||
"trialEnd" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "subscription_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "plan" (
|
||||
"id" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"priceMonthly" INTEGER NOT NULL DEFAULT 0,
|
||||
"priceYearly" INTEGER NOT NULL DEFAULT 0,
|
||||
"stripePriceIdMonthly" TEXT,
|
||||
"stripePriceIdYearly" TEXT,
|
||||
"paypalPlanIdMonthly" TEXT,
|
||||
"paypalPlanIdYearly" TEXT,
|
||||
"limits" JSONB NOT NULL,
|
||||
"features" JSONB NOT NULL,
|
||||
"isPublic" BOOLEAN NOT NULL DEFAULT true,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "plan_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "usage_record" (
|
||||
"id" TEXT NOT NULL,
|
||||
"ownerId" TEXT NOT NULL,
|
||||
"ownerType" TEXT NOT NULL,
|
||||
"periodKey" TEXT NOT NULL,
|
||||
"metric" TEXT NOT NULL,
|
||||
"count" INTEGER NOT NULL DEFAULT 0,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "usage_record_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "episode" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"organizationId" TEXT,
|
||||
"seriesId" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"topic" TEXT NOT NULL,
|
||||
"tone" TEXT NOT NULL,
|
||||
"format" "EpisodeFormat" NOT NULL DEFAULT 'SOLO',
|
||||
"language" TEXT NOT NULL DEFAULT 'en',
|
||||
"targetLengthMin" INTEGER NOT NULL DEFAULT 5,
|
||||
"audience" TEXT,
|
||||
"status" "EpisodeStatus" NOT NULL DEFAULT 'DRAFT',
|
||||
"stage" TEXT,
|
||||
"errorMessage" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "episode_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "script" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"content" JSONB NOT NULL,
|
||||
"model" TEXT NOT NULL DEFAULT 'gpt-4o',
|
||||
"version" INTEGER NOT NULL DEFAULT 1,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "script_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "speaker_config" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"speakerKey" TEXT NOT NULL,
|
||||
"displayName" TEXT NOT NULL,
|
||||
"elevenVoiceId" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "speaker_config_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audio_asset" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"storageKey" TEXT NOT NULL,
|
||||
"durationSec" INTEGER,
|
||||
"sizeBytes" INTEGER,
|
||||
"format" TEXT NOT NULL DEFAULT 'mp3',
|
||||
"segments" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "audio_asset_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "cover_art" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"storageKey" TEXT NOT NULL,
|
||||
"prompt" TEXT NOT NULL,
|
||||
"model" TEXT NOT NULL DEFAULT 'dall-e-3',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "cover_art_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "repurposed_content" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"content" JSONB NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "repurposed_content_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "series" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"organizationId" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"plannedCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"plan" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "series_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "generation_job" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"pgBossJobId" TEXT,
|
||||
"type" TEXT NOT NULL DEFAULT 'full',
|
||||
"status" TEXT NOT NULL DEFAULT 'queued',
|
||||
"stage" TEXT,
|
||||
"attempts" INTEGER NOT NULL DEFAULT 0,
|
||||
"costEstimate" JSONB,
|
||||
"error" TEXT,
|
||||
"startedAt" TIMESTAMP(3),
|
||||
"finishedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "generation_job_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "api_key" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"hashedKey" TEXT NOT NULL,
|
||||
"prefix" TEXT NOT NULL,
|
||||
"lastUsedAt" TIMESTAMP(3),
|
||||
"revokedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "api_key_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audit_log" (
|
||||
"id" TEXT NOT NULL,
|
||||
"actorId" TEXT,
|
||||
"actorType" TEXT NOT NULL DEFAULT 'user',
|
||||
"action" TEXT NOT NULL,
|
||||
"target" TEXT,
|
||||
"metadata" JSONB,
|
||||
"ip" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "audit_log_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "feature_flag" (
|
||||
"key" TEXT NOT NULL,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"rolloutPct" INTEGER NOT NULL DEFAULT 0,
|
||||
"metadata" JSONB,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "feature_flag_pkey" PRIMARY KEY ("key")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ai_cost_log" (
|
||||
"id" TEXT NOT NULL,
|
||||
"provider" TEXT NOT NULL,
|
||||
"operation" TEXT NOT NULL,
|
||||
"episodeId" TEXT,
|
||||
"userId" TEXT,
|
||||
"units" INTEGER NOT NULL DEFAULT 0,
|
||||
"costUsd" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "ai_cost_log_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "content_flag" (
|
||||
"id" TEXT NOT NULL,
|
||||
"episodeId" TEXT NOT NULL,
|
||||
"reason" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'open',
|
||||
"reviewedBy" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "content_flag_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "user_email_key" ON "user"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "session_token_key" ON "session"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_userId_idx" ON "session"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "account_userId_idx" ON "account"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "verification_identifier_idx" ON "verification"("identifier");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "organization_slug_key" ON "organization"("slug");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "member_userId_idx" ON "member"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "member_organizationId_userId_key" ON "member"("organizationId", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "invitation_organizationId_idx" ON "invitation"("organizationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "team_organizationId_idx" ON "team"("organizationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "org_branding_customDomain_key" ON "org_branding"("customDomain");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "subscription_referenceId_idx" ON "subscription"("referenceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "subscription_stripeSubscriptionId_idx" ON "subscription"("stripeSubscriptionId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "subscription_paypalSubscriptionId_idx" ON "subscription"("paypalSubscriptionId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "plan_key_key" ON "plan"("key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "usage_record_ownerId_periodKey_idx" ON "usage_record"("ownerId", "periodKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "usage_record_ownerId_periodKey_metric_key" ON "usage_record"("ownerId", "periodKey", "metric");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "episode_userId_idx" ON "episode"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "episode_organizationId_idx" ON "episode"("organizationId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "episode_seriesId_idx" ON "episode"("seriesId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "episode_status_idx" ON "episode"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "script_episodeId_key" ON "script"("episodeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "speaker_config_episodeId_speakerKey_key" ON "speaker_config"("episodeId", "speakerKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "audio_asset_episodeId_key" ON "audio_asset"("episodeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "cover_art_episodeId_key" ON "cover_art"("episodeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "repurposed_content_episodeId_idx" ON "repurposed_content"("episodeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "series_userId_idx" ON "series"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "generation_job_episodeId_idx" ON "generation_job"("episodeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "generation_job_status_idx" ON "generation_job"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "api_key_hashedKey_key" ON "api_key"("hashedKey");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "api_key_userId_idx" ON "api_key"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_log_action_idx" ON "audit_log"("action");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_log_createdAt_idx" ON "audit_log"("createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ai_cost_log_provider_createdAt_idx" ON "ai_cost_log"("provider", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ai_cost_log_userId_idx" ON "ai_cost_log"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "content_flag_status_idx" ON "content_flag"("status");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "session" ADD CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "account" ADD CONSTRAINT "account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "member" ADD CONSTRAINT "member_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "member" ADD CONSTRAINT "member_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviterId_fkey" FOREIGN KEY ("inviterId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "team" ADD CONSTRAINT "team_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "org_branding" ADD CONSTRAINT "org_branding_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "usage_record" ADD CONSTRAINT "usage_owner_user_fk" FOREIGN KEY ("ownerId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "episode" ADD CONSTRAINT "episode_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "episode" ADD CONSTRAINT "episode_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "episode" ADD CONSTRAINT "episode_seriesId_fkey" FOREIGN KEY ("seriesId") REFERENCES "series"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "script" ADD CONSTRAINT "script_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "speaker_config" ADD CONSTRAINT "speaker_config_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "audio_asset" ADD CONSTRAINT "audio_asset_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "cover_art" ADD CONSTRAINT "cover_art_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "repurposed_content" ADD CONSTRAINT "repurposed_content_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "series" ADD CONSTRAINT "series_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "series" ADD CONSTRAINT "series_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organization"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "generation_job" ADD CONSTRAINT "generation_job_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "api_key" ADD CONSTRAINT "api_key_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "audit_log" ADD CONSTRAINT "audit_log_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "content_flag" ADD CONSTRAINT "content_flag_episodeId_fkey" FOREIGN KEY ("episodeId") REFERENCES "episode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user