feat: 建立漂流瓶权威数据模型
This commit is contained in:
@@ -0,0 +1,463 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AccountStatus" AS ENUM ('ACTIVE', 'SUSPENDED', 'DELETED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AuthProvider" AS ENUM ('PHONE', 'APPLE', 'WECHAT');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "BottleStatus" AS ENUM ('DRAFT', 'IN_POOL', 'PICKED', 'EXPIRED', 'REMOVED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ConversationStatus" AS ENUM ('ACTIVE', 'CLOSED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "MessageStatus" AS ENUM ('SENT', 'DELETED', 'MODERATED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ReportStatus" AS ENUM ('PENDING', 'REVIEWING', 'RESOLVED', 'DISMISSED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ModerationTaskStatus" AS ENUM ('PENDING', 'PROCESSING', 'COMPLETED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "SanctionType" AS ENUM ('WARNING', 'MUTE', 'SUSPENSION', 'BAN');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "NotificationStatus" AS ENUM ('PENDING', 'SENT', 'READ', 'FAILED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "OutboxStatus" AS ENUM ('PENDING', 'PROCESSING', 'PUBLISHED', 'FAILED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "accounts" (
|
||||
"id" UUID NOT NULL,
|
||||
"phone_ciphertext" BYTEA NOT NULL,
|
||||
"phone_hmac" VARCHAR(128) NOT NULL,
|
||||
"status" "AccountStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"token_version" INTEGER NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "accounts_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "anonymous_profiles" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"nickname" VARCHAR(64) NOT NULL,
|
||||
"avatar_key" VARCHAR(255),
|
||||
"bio" VARCHAR(500),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "anonymous_profiles_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "auth_identities" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"provider" "AuthProvider" NOT NULL,
|
||||
"provider_subject" VARCHAR(255) NOT NULL,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "auth_identities_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sessions" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"refresh_token_hash" VARCHAR(255) NOT NULL,
|
||||
"device_id" VARCHAR(255),
|
||||
"expires_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
"revoked_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "bottles" (
|
||||
"id" UUID NOT NULL,
|
||||
"author_id" UUID NOT NULL,
|
||||
"content_text" TEXT NOT NULL,
|
||||
"status" "BottleStatus" NOT NULL DEFAULT 'DRAFT',
|
||||
"picked_at" TIMESTAMPTZ(3),
|
||||
"expires_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "bottles_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "bottle_pick_leases" (
|
||||
"id" UUID NOT NULL,
|
||||
"bottle_id" UUID NOT NULL,
|
||||
"picker_id" UUID NOT NULL,
|
||||
"lease_token_hash" VARCHAR(255) NOT NULL,
|
||||
"expires_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
"consumed_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "bottle_pick_leases_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "bottle_pick_history" (
|
||||
"id" UUID NOT NULL,
|
||||
"bottle_id" UUID NOT NULL,
|
||||
"picker_id" UUID NOT NULL,
|
||||
"picked_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "bottle_pick_history_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "daily_usage" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"usage_date" DATE NOT NULL,
|
||||
"bottles_created" INTEGER NOT NULL DEFAULT 0,
|
||||
"bottles_picked" INTEGER NOT NULL DEFAULT 0,
|
||||
"messages_sent" INTEGER NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "daily_usage_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "conversations" (
|
||||
"id" UUID NOT NULL,
|
||||
"source_bottle_id" UUID NOT NULL,
|
||||
"status" "ConversationStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"next_seq" INTEGER NOT NULL DEFAULT 1,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "conversations_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "conversation_members" (
|
||||
"id" UUID NOT NULL,
|
||||
"conversation_id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"joined_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"left_at" TIMESTAMPTZ(3),
|
||||
"last_read_seq" INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "conversation_members_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "messages" (
|
||||
"id" UUID NOT NULL,
|
||||
"conversation_id" UUID NOT NULL,
|
||||
"sender_id" UUID NOT NULL,
|
||||
"client_msg_id" VARCHAR(128) NOT NULL,
|
||||
"seq" INTEGER NOT NULL,
|
||||
"content_text" TEXT NOT NULL,
|
||||
"status" "MessageStatus" NOT NULL DEFAULT 'SENT',
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "messages_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "blocks" (
|
||||
"id" UUID NOT NULL,
|
||||
"blocker_id" UUID NOT NULL,
|
||||
"blocked_id" UUID NOT NULL,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "blocks_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "reports" (
|
||||
"id" UUID NOT NULL,
|
||||
"reporter_id" UUID NOT NULL,
|
||||
"reported_account_id" UUID,
|
||||
"bottle_id" UUID,
|
||||
"conversation_id" UUID,
|
||||
"message_id" UUID,
|
||||
"reason" VARCHAR(100) NOT NULL,
|
||||
"details" TEXT,
|
||||
"status" "ReportStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "reports_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "moderation_tasks" (
|
||||
"id" UUID NOT NULL,
|
||||
"report_id" UUID NOT NULL,
|
||||
"assigned_to_id" UUID,
|
||||
"status" "ModerationTaskStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"decision" TEXT,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "moderation_tasks_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sanctions" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"issued_by_id" UUID,
|
||||
"moderation_task_id" UUID,
|
||||
"type" "SanctionType" NOT NULL,
|
||||
"reason" TEXT NOT NULL,
|
||||
"starts_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"expires_at" TIMESTAMPTZ(3),
|
||||
"revoked_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "sanctions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "notifications" (
|
||||
"id" UUID NOT NULL,
|
||||
"account_id" UUID NOT NULL,
|
||||
"type" VARCHAR(100) NOT NULL,
|
||||
"payload" JSONB NOT NULL,
|
||||
"status" "NotificationStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"sent_at" TIMESTAMPTZ(3),
|
||||
"read_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "outbox_events" (
|
||||
"id" UUID NOT NULL,
|
||||
"aggregate_type" VARCHAR(100) NOT NULL,
|
||||
"aggregate_id" UUID NOT NULL,
|
||||
"event_type" VARCHAR(150) NOT NULL,
|
||||
"payload" JSONB NOT NULL,
|
||||
"status" "OutboxStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"attempts" INTEGER NOT NULL DEFAULT 0,
|
||||
"available_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"published_at" TIMESTAMPTZ(3),
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "outbox_events_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audit_logs" (
|
||||
"id" UUID NOT NULL,
|
||||
"actor_id" UUID,
|
||||
"action" VARCHAR(150) NOT NULL,
|
||||
"entity_type" VARCHAR(100) NOT NULL,
|
||||
"entity_id" UUID,
|
||||
"request_id" VARCHAR(128),
|
||||
"ip_hash" VARCHAR(128),
|
||||
"metadata" JSONB,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "accounts_phone_hmac_key" ON "accounts"("phone_hmac");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "anonymous_profiles_account_id_key" ON "anonymous_profiles"("account_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "auth_identities_account_id_idx" ON "auth_identities"("account_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "auth_identities_provider_provider_subject_key" ON "auth_identities"("provider", "provider_subject");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sessions_refresh_token_hash_key" ON "sessions"("refresh_token_hash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sessions_account_id_expires_at_idx" ON "sessions"("account_id", "expires_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "bottles_status_created_at_idx" ON "bottles"("status", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "bottles_author_id_created_at_idx" ON "bottles"("author_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "bottle_pick_leases_lease_token_hash_key" ON "bottle_pick_leases"("lease_token_hash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "bottle_pick_leases_picker_id_expires_at_idx" ON "bottle_pick_leases"("picker_id", "expires_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "bottle_pick_leases_bottle_id_expires_at_idx" ON "bottle_pick_leases"("bottle_id", "expires_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "bottle_pick_history_picker_id_picked_at_idx" ON "bottle_pick_history"("picker_id", "picked_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "bottle_pick_history_bottle_id_picker_id_key" ON "bottle_pick_history"("bottle_id", "picker_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "daily_usage_usage_date_idx" ON "daily_usage"("usage_date");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "daily_usage_account_id_usage_date_key" ON "daily_usage"("account_id", "usage_date");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "conversations_source_bottle_id_key" ON "conversations"("source_bottle_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversations_status_updated_at_idx" ON "conversations"("status", "updated_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversation_members_account_id_joined_at_idx" ON "conversation_members"("account_id", "joined_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "conversation_members_conversation_id_account_id_key" ON "conversation_members"("conversation_id", "account_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "messages_sender_id_created_at_idx" ON "messages"("sender_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "messages_conversation_id_client_msg_id_key" ON "messages"("conversation_id", "client_msg_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "messages_conversation_id_seq_key" ON "messages"("conversation_id", "seq");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "blocks_blocked_id_idx" ON "blocks"("blocked_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "blocks_blocker_id_blocked_id_key" ON "blocks"("blocker_id", "blocked_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "reports_status_created_at_idx" ON "reports"("status", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "reports_reported_account_id_created_at_idx" ON "reports"("reported_account_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "moderation_tasks_status_created_at_idx" ON "moderation_tasks"("status", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "moderation_tasks_assigned_to_id_status_idx" ON "moderation_tasks"("assigned_to_id", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sanctions_account_id_expires_at_idx" ON "sanctions"("account_id", "expires_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "notifications_account_id_status_created_at_idx" ON "notifications"("account_id", "status", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "outbox_events_status_available_at_idx" ON "outbox_events"("status", "available_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "outbox_events_aggregate_type_aggregate_id_idx" ON "outbox_events"("aggregate_type", "aggregate_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_logs_actor_id_created_at_idx" ON "audit_logs"("actor_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_logs_entity_type_entity_id_created_at_idx" ON "audit_logs"("entity_type", "entity_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_logs_request_id_idx" ON "audit_logs"("request_id");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "anonymous_profiles" ADD CONSTRAINT "anonymous_profiles_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "auth_identities" ADD CONSTRAINT "auth_identities_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "bottles" ADD CONSTRAINT "bottles_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "accounts"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "bottle_pick_leases" ADD CONSTRAINT "bottle_pick_leases_bottle_id_fkey" FOREIGN KEY ("bottle_id") REFERENCES "bottles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "bottle_pick_leases" ADD CONSTRAINT "bottle_pick_leases_picker_id_fkey" FOREIGN KEY ("picker_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "bottle_pick_history" ADD CONSTRAINT "bottle_pick_history_bottle_id_fkey" FOREIGN KEY ("bottle_id") REFERENCES "bottles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "bottle_pick_history" ADD CONSTRAINT "bottle_pick_history_picker_id_fkey" FOREIGN KEY ("picker_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "daily_usage" ADD CONSTRAINT "daily_usage_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "conversations" ADD CONSTRAINT "conversations_source_bottle_id_fkey" FOREIGN KEY ("source_bottle_id") REFERENCES "bottles"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "conversation_members" ADD CONSTRAINT "conversation_members_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "conversations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "conversation_members" ADD CONSTRAINT "conversation_members_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "messages" ADD CONSTRAINT "messages_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "conversations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "messages" ADD CONSTRAINT "messages_sender_id_fkey" FOREIGN KEY ("sender_id") REFERENCES "accounts"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "blocks" ADD CONSTRAINT "blocks_blocker_id_fkey" FOREIGN KEY ("blocker_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "blocks" ADD CONSTRAINT "blocks_blocked_id_fkey" FOREIGN KEY ("blocked_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "reports" ADD CONSTRAINT "reports_reporter_id_fkey" FOREIGN KEY ("reporter_id") REFERENCES "accounts"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "reports" ADD CONSTRAINT "reports_reported_account_id_fkey" FOREIGN KEY ("reported_account_id") REFERENCES "accounts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "reports" ADD CONSTRAINT "reports_bottle_id_fkey" FOREIGN KEY ("bottle_id") REFERENCES "bottles"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "reports" ADD CONSTRAINT "reports_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "conversations"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "reports" ADD CONSTRAINT "reports_message_id_fkey" FOREIGN KEY ("message_id") REFERENCES "messages"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "moderation_tasks" ADD CONSTRAINT "moderation_tasks_report_id_fkey" FOREIGN KEY ("report_id") REFERENCES "reports"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "moderation_tasks" ADD CONSTRAINT "moderation_tasks_assigned_to_id_fkey" FOREIGN KEY ("assigned_to_id") REFERENCES "accounts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "sanctions" ADD CONSTRAINT "sanctions_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "sanctions" ADD CONSTRAINT "sanctions_issued_by_id_fkey" FOREIGN KEY ("issued_by_id") REFERENCES "accounts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "sanctions" ADD CONSTRAINT "sanctions_moderation_task_id_fkey" FOREIGN KEY ("moderation_task_id") REFERENCES "moderation_tasks"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_account_id_fkey" FOREIGN KEY ("account_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_actor_id_fkey" FOREIGN KEY ("actor_id") REFERENCES "accounts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user