183 lines
5.9 KiB
SQL
183 lines
5.9 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'USER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RequestState" AS ENUM ('PENDING', 'CHANGES_REQUESTED', 'APPROVED', 'REJECTED', 'EXPIRED', 'CONSUMED', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "NotificationType" AS ENUM ('REQUEST_CREATED', 'REQUEST_UPDATED', 'REQUEST_APPROVED', 'REQUEST_REJECTED', 'CHANGES_REQUESTED', 'REQUEST_CONSUMED', 'REQUEST_CANCELLED', 'REQUEST_EXPIRED', 'AGENT_DISABLED', 'ADMIN_ACTION', 'SETTINGS_CHANGED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "GlobalSettingType" AS ENUM ('registration_enabled', 'requests_enabled');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GlobalSetting" (
|
|
"type" "GlobalSettingType" NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "GlobalSetting_pkey" PRIMARY KEY ("type")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" SERIAL NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"displayName" TEXT NOT NULL,
|
|
"password" TEXT NOT NULL,
|
|
"role" "UserRole" NOT NULL DEFAULT 'USER',
|
|
"totpSecret" TEXT,
|
|
"totpEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"disabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"autoDeleteEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"autoDeleteDays" INTEGER NOT NULL DEFAULT 30,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Session" (
|
|
"id" SERIAL NOT NULL,
|
|
"hash" TEXT NOT NULL,
|
|
"userId" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Agent" (
|
|
"id" SERIAL NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"website" TEXT,
|
|
"iconUrl" TEXT,
|
|
"apiKey" TEXT NOT NULL,
|
|
"disabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"maxPendingRequests" INTEGER NOT NULL DEFAULT 5,
|
|
"ownerId" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Agent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ChangeRequest" (
|
|
"id" SERIAL NOT NULL,
|
|
"publicId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"changes" JSONB NOT NULL,
|
|
"rawChanges" JSONB NOT NULL,
|
|
"metadata" JSONB,
|
|
"contentHash" TEXT NOT NULL,
|
|
"state" "RequestState" NOT NULL DEFAULT 'PENDING',
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"comment" TEXT,
|
|
"decidedAt" TIMESTAMP(3),
|
|
"approverId" INTEGER,
|
|
"signature" TEXT,
|
|
"receiptIssuedAt" TIMESTAMP(3),
|
|
"consumedAt" TIMESTAMP(3),
|
|
"cancelledAt" TIMESTAMP(3),
|
|
"updateCount" INTEGER NOT NULL DEFAULT 0,
|
|
"resubmitted" BOOLEAN NOT NULL DEFAULT false,
|
|
"lastAgentUpdateAt" TIMESTAMP(3),
|
|
"agentId" INTEGER NOT NULL,
|
|
"userId" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ChangeRequest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Notification" (
|
|
"id" SERIAL NOT NULL,
|
|
"type" "NotificationType" NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"requestPublicId" TEXT,
|
|
"read" BOOLEAN NOT NULL DEFAULT false,
|
|
"userId" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Notification_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLog" (
|
|
"id" SERIAL NOT NULL,
|
|
"action" TEXT NOT NULL,
|
|
"detail" TEXT,
|
|
"targetType" TEXT,
|
|
"targetId" TEXT,
|
|
"actorId" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Session_hash_key" ON "Session"("hash");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Session_userId_idx" ON "Session"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Agent_apiKey_key" ON "Agent"("apiKey");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Agent_ownerId_idx" ON "Agent"("ownerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ChangeRequest_publicId_key" ON "ChangeRequest"("publicId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ChangeRequest_userId_state_idx" ON "ChangeRequest"("userId", "state");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ChangeRequest_agentId_state_idx" ON "ChangeRequest"("agentId", "state");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ChangeRequest_createdAt_idx" ON "ChangeRequest"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notification_userId_read_idx" ON "Notification"("userId", "read");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notification_userId_createdAt_idx" ON "Notification"("userId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_createdAt_idx" ON "AuditLog"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_actorId_idx" ON "AuditLog"("actorId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Agent" ADD CONSTRAINT "Agent_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ChangeRequest" ADD CONSTRAINT "ChangeRequest_approverId_fkey" FOREIGN KEY ("approverId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ChangeRequest" ADD CONSTRAINT "ChangeRequest_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ChangeRequest" ADD CONSTRAINT "ChangeRequest_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AuditLog" ADD CONSTRAINT "AuditLog_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|