mirror of
https://forgejo.ultimateplayer.xyz/ultimateplayer1999/dcordabuse.git
synced 2026-09-15 20:55:49 -04:00
101 lines
3.2 KiB
SQL
101 lines
3.2 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "ReportStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ReportCategory" AS ENUM ('COMPROMISED_ACCOUNT', 'SPAM', 'SCAM', 'MALWARE', 'ABUSE_HOSTING', 'SCRAPING', 'IMPERSONATION', 'OTHER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ApiKeyRole" AS ENUM ('SUBMITTER', 'ADMIN');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ApiKey" (
|
|
"id" TEXT NOT NULL,
|
|
"hashedKey" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"role" "ApiKeyRole" NOT NULL DEFAULT 'SUBMITTER',
|
|
"revoked" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"lastUsedAt" TIMESTAMP(3),
|
|
"rateWindowStart" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"rateCount" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "ApiKey_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ReportedUser" (
|
|
"id" TEXT NOT NULL,
|
|
"discordId" TEXT NOT NULL,
|
|
"username" TEXT,
|
|
"firstSeen" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"lastSeen" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ReportedUser_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Report" (
|
|
"id" TEXT NOT NULL,
|
|
"discordId" TEXT NOT NULL,
|
|
"category" "ReportCategory" NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"evidenceUrl" TEXT,
|
|
"status" "ReportStatus" NOT NULL DEFAULT 'PENDING',
|
|
"rejectionReason" TEXT,
|
|
"submittedById" TEXT NOT NULL,
|
|
"reviewedById" TEXT,
|
|
"reviewedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Report_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLogs" (
|
|
"id" TEXT NOT NULL,
|
|
"actorId" TEXT NOT NULL,
|
|
"action" TEXT NOT NULL,
|
|
"targetType" TEXT NOT NULL,
|
|
"targetId" TEXT NOT NULL,
|
|
"metadata" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AuditLogs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ApiKey_hashedKey_key" ON "ApiKey"("hashedKey");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ApiKey_revoked_idx" ON "ApiKey"("revoked");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ReportedUser_discordId_key" ON "ReportedUser"("discordId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ReportedUser_discordId_idx" ON "ReportedUser"("discordId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Report_discordId_status_idx" ON "Report"("discordId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Report_status_createdAt_idx" ON "Report"("status", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLogs_actorId_idx" ON "AuditLogs"("actorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLogs_targetType_targetId_idx" ON "AuditLogs"("targetType", "targetId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Report" ADD CONSTRAINT "Report_discordId_fkey" FOREIGN KEY ("discordId") REFERENCES "ReportedUser"("discordId") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Report" ADD CONSTRAINT "Report_submittedById_fkey" FOREIGN KEY ("submittedById") REFERENCES "ApiKey"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Report" ADD CONSTRAINT "Report_reviewedById_fkey" FOREIGN KEY ("reviewedById") REFERENCES "ApiKey"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AuditLogs" ADD CONSTRAINT "AuditLogs_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "ApiKey"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|