Enhance environment configuration and expand Prisma schema for bot management

- Added OWNER_USER_IDS to .env.example for specifying global bot owners.
- Introduced new models in the Prisma schema: CommandOverride, OwnerTeamMember, GlobalUserBlacklist, GuildBlacklist, FeatureFlag, BotPresenceConfig, ChangelogEntry, and OwnerAuditLog to support advanced bot management features.
- Updated env.ts to preprocess OWNER_USER_IDS for better handling of global bot owner IDs.
- Modified ModulePlaceholderPage to ensure proper routing for remaining dashboard modules.
This commit is contained in:
smueller
2026-07-22 14:51:56 +02:00
parent 946283dfba
commit 1de28fa494
54 changed files with 3564 additions and 3 deletions

View File

@@ -0,0 +1,131 @@
-- CreateTable
CREATE TABLE "CommandOverride" (
"id" TEXT NOT NULL,
"guildId" TEXT NOT NULL,
"commandName" TEXT NOT NULL,
"enabled" BOOLEAN NOT NULL DEFAULT true,
"allowedRoleIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
"deniedRoleIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
"allowedChannelIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
"deniedChannelIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
"cooldownSeconds" INTEGER,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CommandOverride_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OwnerTeamMember" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"role" TEXT NOT NULL,
"note" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "OwnerTeamMember_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "GlobalUserBlacklist" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"reason" TEXT,
"note" TEXT,
"createdById" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "GlobalUserBlacklist_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "GuildBlacklist" (
"id" TEXT NOT NULL,
"guildId" TEXT NOT NULL,
"reason" TEXT,
"createdById" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "GuildBlacklist_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "FeatureFlag" (
"id" TEXT NOT NULL,
"key" TEXT NOT NULL,
"enabled" BOOLEAN NOT NULL DEFAULT false,
"rolloutPercent" INTEGER NOT NULL DEFAULT 0,
"whitelistGuildIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "FeatureFlag_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "BotPresenceConfig" (
"id" TEXT NOT NULL DEFAULT 'singleton',
"status" TEXT NOT NULL DEFAULT 'online',
"activityType" TEXT NOT NULL DEFAULT 'Playing',
"activityText" TEXT NOT NULL DEFAULT 'nexumi.de',
"rotatingMessages" JSONB,
"maintenanceMode" BOOLEAN NOT NULL DEFAULT false,
"maintenanceMessage" TEXT,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "BotPresenceConfig_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ChangelogEntry" (
"id" TEXT NOT NULL,
"version" TEXT NOT NULL,
"title" TEXT NOT NULL,
"body" TEXT NOT NULL,
"publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ChangelogEntry_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OwnerAuditLog" (
"id" TEXT NOT NULL,
"actorUserId" TEXT NOT NULL,
"action" TEXT NOT NULL,
"targetType" TEXT,
"targetId" TEXT,
"before" JSONB,
"after" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "OwnerAuditLog_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "CommandOverride_guildId_idx" ON "CommandOverride"("guildId");
-- CreateIndex
CREATE UNIQUE INDEX "CommandOverride_guildId_commandName_key" ON "CommandOverride"("guildId", "commandName");
-- CreateIndex
CREATE UNIQUE INDEX "OwnerTeamMember_userId_key" ON "OwnerTeamMember"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "GlobalUserBlacklist_userId_key" ON "GlobalUserBlacklist"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "GuildBlacklist_guildId_key" ON "GuildBlacklist"("guildId");
-- CreateIndex
CREATE UNIQUE INDEX "FeatureFlag_key_key" ON "FeatureFlag"("key");
-- CreateIndex
CREATE INDEX "OwnerAuditLog_createdAt_idx" ON "OwnerAuditLog"("createdAt");
-- AddForeignKey
ALTER TABLE "CommandOverride" ADD CONSTRAINT "CommandOverride_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;