467 lines
16 KiB
SQL
467 lines
16 KiB
SQL
/*
|
|
Warnings:
|
|
|
|
- You are about to drop the `Message` table. If the table is not empty, all the data it contains will be lost.
|
|
- You are about to drop the `User` table. If the table is not empty, all the data it contains will be lost.
|
|
|
|
*/
|
|
-- DropTable
|
|
PRAGMA foreign_keys=off;
|
|
DROP TABLE "Message";
|
|
PRAGMA foreign_keys=on;
|
|
|
|
-- DropTable
|
|
PRAGMA foreign_keys=off;
|
|
DROP TABLE "User";
|
|
PRAGMA foreign_keys=on;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "boards" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"type" TEXT NOT NULL DEFAULT 'general',
|
|
"requiresApproval" BOOLEAN NOT NULL DEFAULT false,
|
|
"allowAnonymousPost" BOOLEAN NOT NULL DEFAULT false,
|
|
"allowSecretComment" BOOLEAN NOT NULL DEFAULT false,
|
|
"isAdultOnly" BOOLEAN NOT NULL DEFAULT false,
|
|
"requiredTags" JSONB,
|
|
"requiredFields" JSONB,
|
|
"readLevel" TEXT NOT NULL DEFAULT 'public',
|
|
"writeLevel" TEXT NOT NULL DEFAULT 'member',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "board_moderators" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"boardId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'MODERATOR',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "board_moderators_boardId_fkey" FOREIGN KEY ("boardId") REFERENCES "boards" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "board_moderators_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "posts" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"boardId" TEXT NOT NULL,
|
|
"authorId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'published',
|
|
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
|
|
"isPinned" BOOLEAN NOT NULL DEFAULT false,
|
|
"pinnedOrder" INTEGER,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"lastActivityAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "posts_boardId_fkey" FOREIGN KEY ("boardId") REFERENCES "boards" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "posts_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"userId" TEXT NOT NULL PRIMARY KEY,
|
|
"nickname" TEXT NOT NULL,
|
|
"passwordHash" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"birth" DATETIME NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"rank" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"authLevel" TEXT NOT NULL DEFAULT 'USER',
|
|
"profileImage" TEXT,
|
|
"lastLoginAt" DATETIME,
|
|
"isAdultVerified" BOOLEAN NOT NULL DEFAULT false,
|
|
"loginFailCount" INTEGER NOT NULL DEFAULT 0,
|
|
"agreementTermsAt" DATETIME NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "roles" (
|
|
"roleId" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "user_roles" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"roleId" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "user_roles_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "user_roles_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "roles" ("roleId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "comments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"postId" TEXT NOT NULL,
|
|
"authorId" TEXT,
|
|
"content" TEXT NOT NULL,
|
|
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
|
|
"isSecret" BOOLEAN NOT NULL DEFAULT false,
|
|
"secretPasswordHash" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "comments_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "comments_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "tags" (
|
|
"tagId" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "post_tags" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"postId" TEXT NOT NULL,
|
|
"tagId" TEXT NOT NULL,
|
|
CONSTRAINT "post_tags_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "post_tags_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "tags" ("tagId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "attachments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"postId" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'image',
|
|
"size" INTEGER,
|
|
"width" INTEGER,
|
|
"height" INTEGER,
|
|
"sortOrder" INTEGER,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "attachments_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reactions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"postId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"clientHash" TEXT,
|
|
"type" TEXT NOT NULL DEFAULT 'RECOMMEND',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "reactions_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "reactions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "post_view_logs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"postId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"ip" TEXT,
|
|
"userAgent" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "post_view_logs_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "post_view_logs_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "post_stats" (
|
|
"postId" TEXT NOT NULL PRIMARY KEY,
|
|
"views" INTEGER NOT NULL DEFAULT 0,
|
|
"recommendCount" INTEGER NOT NULL DEFAULT 0,
|
|
"reportCount" INTEGER NOT NULL DEFAULT 0,
|
|
"commentsCount" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "post_stats_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reports" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"reporterId" TEXT,
|
|
"targetType" TEXT NOT NULL,
|
|
"postId" TEXT,
|
|
"commentId" TEXT,
|
|
"reason" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'open',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "reports_reporterId_fkey" FOREIGN KEY ("reporterId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "reports_postId_fkey" FOREIGN KEY ("postId") REFERENCES "posts" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "reports_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "messages" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"senderId" TEXT NOT NULL,
|
|
"receiverId" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"readAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "messages_senderId_fkey" FOREIGN KEY ("senderId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "messages_receiverId_fkey" FOREIGN KEY ("receiverId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "blocks" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"blockerId" TEXT NOT NULL,
|
|
"blockedId" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "blocks_blockerId_fkey" FOREIGN KEY ("blockerId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "blocks_blockedId_fkey" FOREIGN KEY ("blockedId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "point_transactions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"amount" INTEGER NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
"referenceType" TEXT,
|
|
"referenceId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "point_transactions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "level_thresholds" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"level" INTEGER NOT NULL,
|
|
"minPoints" INTEGER NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "banned_keywords" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"pattern" TEXT NOT NULL,
|
|
"appliesTo" TEXT NOT NULL,
|
|
"severity" INTEGER NOT NULL DEFAULT 1,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "sanctions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
"startAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"endAt" DATETIME,
|
|
"createdBy" TEXT,
|
|
CONSTRAINT "sanctions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "audit_logs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"actorId" TEXT,
|
|
"action" TEXT NOT NULL,
|
|
"targetType" TEXT,
|
|
"targetId" TEXT,
|
|
"meta" JSONB,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "audit_logs_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "admin_notifications" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"type" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"targetType" TEXT,
|
|
"targetId" TEXT,
|
|
"createdBy" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"readAt" DATETIME,
|
|
CONSTRAINT "admin_notifications_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "login_sessions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"device" TEXT,
|
|
"ip" TEXT,
|
|
"userAgent" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"lastSeenAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "login_sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ip_blocks" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"ip" TEXT NOT NULL,
|
|
"reason" TEXT,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdBy" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "ip_blocks_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users" ("userId") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "nickname_changes" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"oldNickname" TEXT NOT NULL,
|
|
"newNickname" TEXT NOT NULL,
|
|
"changedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "nickname_changes_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "password_reset_tokens" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"expiresAt" DATETIME NOT NULL,
|
|
"usedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "password_reset_tokens_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("userId") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "boards_slug_key" ON "boards"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "boards_status_sortOrder_idx" ON "boards"("status", "sortOrder");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "boards_type_requiresApproval_idx" ON "boards"("type", "requiresApproval");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "board_moderators_userId_idx" ON "board_moderators"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "board_moderators_boardId_userId_key" ON "board_moderators"("boardId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "posts_boardId_status_createdAt_idx" ON "posts"("boardId", "status", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "posts_boardId_isPinned_pinnedOrder_idx" ON "posts"("boardId", "isPinned", "pinnedOrder");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_nickname_key" ON "users"("nickname");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_phone_key" ON "users"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "users_status_idx" ON "users"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "users_createdAt_idx" ON "users"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "roles_name_key" ON "roles"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "user_roles_roleId_idx" ON "user_roles"("roleId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "user_roles_userId_roleId_key" ON "user_roles"("userId", "roleId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "comments_postId_createdAt_idx" ON "comments"("postId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "tags_name_key" ON "tags"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "tags_slug_key" ON "tags"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "post_tags_tagId_idx" ON "post_tags"("tagId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "post_tags_postId_tagId_key" ON "post_tags"("postId", "tagId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "attachments_postId_idx" ON "attachments"("postId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reactions_postId_type_idx" ON "reactions"("postId", "type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reactions_userId_idx" ON "reactions"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reactions_clientHash_idx" ON "reactions"("clientHash");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "reactions_postId_type_userId_clientHash_key" ON "reactions"("postId", "type", "userId", "clientHash");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "post_view_logs_postId_createdAt_idx" ON "post_view_logs"("postId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "post_view_logs_userId_idx" ON "post_view_logs"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reports_targetType_idx" ON "reports"("targetType");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reports_postId_idx" ON "reports"("postId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reports_commentId_idx" ON "reports"("commentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "messages_senderId_createdAt_idx" ON "messages"("senderId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "messages_receiverId_createdAt_idx" ON "messages"("receiverId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "blocks_blockedId_idx" ON "blocks"("blockedId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "blocks_blockerId_blockedId_key" ON "blocks"("blockerId", "blockedId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "point_transactions_userId_createdAt_idx" ON "point_transactions"("userId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "level_thresholds_level_key" ON "level_thresholds"("level");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "banned_keywords_pattern_key" ON "banned_keywords"("pattern");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "banned_keywords_appliesTo_idx" ON "banned_keywords"("appliesTo");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "sanctions_userId_type_idx" ON "sanctions"("userId", "type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "audit_logs_action_createdAt_idx" ON "audit_logs"("action", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "admin_notifications_type_createdAt_idx" ON "admin_notifications"("type", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "login_sessions_userId_lastSeenAt_idx" ON "login_sessions"("userId", "lastSeenAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ip_blocks_ip_active_key" ON "ip_blocks"("ip", "active");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "nickname_changes_userId_changedAt_idx" ON "nickname_changes"("userId", "changedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "password_reset_tokens_token_key" ON "password_reset_tokens"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "password_reset_tokens_userId_expiresAt_idx" ON "password_reset_tokens"("userId", "expiresAt");
|