289 lines
10 KiB
PL/PgSQL
289 lines
10 KiB
PL/PgSQL
-- HISTORISCHER UPGRADEPFAD: aktuelle Releases verwenden prisma/migrations und deploy/README.md.
|
|
-- Nicht zusätzlich zu versionierten Migrationen oder auf bereits aktualisierten Datenbanken ausführen.
|
|
-- Einmalige Einführung des vollständigen Personalbereichs inklusive E-Mails ab ec3f4f9.
|
|
-- Beschreibt ausschließlich den damaligen Ausgangsstand vor Einführung der Migrationshistorie.
|
|
BEGIN;
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "StaffRequestStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED', 'CANCEL_REQUESTED', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "StaffLeaveKind" AS ENUM ('VACATION', 'TIME_OFF', 'SICKNESS');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "StaffWeekStatus" AS ENUM ('DRAFT', 'SUBMITTED', 'APPROVED');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "users" ADD COLUMN "staffDecisionEmails" BOOLEAN NOT NULL DEFAULT true;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_profiles" (
|
|
"id" TEXT NOT NULL,
|
|
"kitaId" TEXT NOT NULL,
|
|
"educatorId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"employmentStart" DATE NOT NULL,
|
|
"employmentEnd" DATE,
|
|
"trackingStart" DATE NOT NULL,
|
|
"openingMinutes" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "staff_profiles_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_emails" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"toAdmins" BOOLEAN NOT NULL DEFAULT false,
|
|
"subject" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"path" TEXT NOT NULL,
|
|
"inviteToken" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"sentAt" TIMESTAMP(3),
|
|
"skippedAt" TIMESTAMP(3),
|
|
"leaseUntil" TIMESTAMP(3),
|
|
"attempts" INTEGER NOT NULL DEFAULT 0,
|
|
"failed" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "staff_emails_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_work_patterns" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"effectiveFrom" DATE NOT NULL,
|
|
"dailyMinutes" INTEGER[],
|
|
|
|
CONSTRAINT "staff_work_patterns_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_day_overrides" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"date" DATE NOT NULL,
|
|
"minutes" INTEGER NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "staff_day_overrides_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_holidays" (
|
|
"id" TEXT NOT NULL,
|
|
"kitaId" TEXT NOT NULL,
|
|
"date" DATE NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "staff_holidays_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_leave_accounts" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"year" INTEGER NOT NULL,
|
|
"entitlementUnits" INTEGER NOT NULL,
|
|
"carryUnits" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "staff_leave_accounts_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_leaves" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"kind" "StaffLeaveKind" NOT NULL,
|
|
"status" "StaffRequestStatus" NOT NULL DEFAULT 'PENDING',
|
|
"startDate" DATE NOT NULL,
|
|
"endDate" DATE NOT NULL,
|
|
"halfDay" BOOLEAN NOT NULL DEFAULT false,
|
|
"minutes" INTEGER,
|
|
"note" TEXT,
|
|
"decisionNote" TEXT,
|
|
"requestedById" TEXT NOT NULL,
|
|
"reviewedById" TEXT,
|
|
"reviewedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "staff_leaves_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_leave_days" (
|
|
"id" TEXT NOT NULL,
|
|
"leaveId" TEXT NOT NULL,
|
|
"date" DATE NOT NULL,
|
|
"vacationUnits" INTEGER NOT NULL DEFAULT 0,
|
|
"creditMinutes" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "staff_leave_days_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_time_entries" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"date" DATE NOT NULL,
|
|
"startMinute" INTEGER NOT NULL,
|
|
"endMinute" INTEGER NOT NULL,
|
|
"breakMinutes" INTEGER NOT NULL DEFAULT 0,
|
|
"note" TEXT,
|
|
|
|
CONSTRAINT "staff_time_entries_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_weeks" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"weekStart" DATE NOT NULL,
|
|
"status" "StaffWeekStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"submittedAt" TIMESTAMP(3),
|
|
"reviewedAt" TIMESTAMP(3),
|
|
"reviewedById" TEXT,
|
|
"decisionNote" TEXT,
|
|
"dailySnapshot" JSONB,
|
|
|
|
CONSTRAINT "staff_weeks_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_adjustments" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"date" DATE NOT NULL,
|
|
"minutes" INTEGER NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
"actorId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "staff_adjustments_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_history" (
|
|
"id" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"actorId" TEXT NOT NULL,
|
|
"action" TEXT NOT NULL,
|
|
"details" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "staff_history_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "staff_notifications" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"readAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "staff_notifications_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_profiles_educatorId_key" ON "staff_profiles"("educatorId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_profiles_userId_key" ON "staff_profiles"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_profiles_kitaId_idx" ON "staff_profiles"("kitaId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_emails_profileId_sentAt_skippedAt_idx" ON "staff_emails"("profileId", "sentAt", "skippedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_work_patterns_profileId_effectiveFrom_key" ON "staff_work_patterns"("profileId", "effectiveFrom");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_day_overrides_profileId_date_key" ON "staff_day_overrides"("profileId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_holidays_kitaId_date_key" ON "staff_holidays"("kitaId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_leave_accounts_profileId_year_key" ON "staff_leave_accounts"("profileId", "year");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_leaves_profileId_status_startDate_idx" ON "staff_leaves"("profileId", "status", "startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_leave_days_leaveId_date_key" ON "staff_leave_days"("leaveId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_time_entries_profileId_date_idx" ON "staff_time_entries"("profileId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "staff_weeks_profileId_weekStart_key" ON "staff_weeks"("profileId", "weekStart");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_adjustments_profileId_date_idx" ON "staff_adjustments"("profileId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_history_profileId_createdAt_idx" ON "staff_history"("profileId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "staff_notifications_userId_readAt_createdAt_idx" ON "staff_notifications"("userId", "readAt", "createdAt");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_profiles" ADD CONSTRAINT "staff_profiles_kitaId_fkey" FOREIGN KEY ("kitaId") REFERENCES "kitas"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_profiles" ADD CONSTRAINT "staff_profiles_educatorId_fkey" FOREIGN KEY ("educatorId") REFERENCES "educators"("id") ON DELETE NO ACTION ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_profiles" ADD CONSTRAINT "staff_profiles_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_emails" ADD CONSTRAINT "staff_emails_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_emails" ADD CONSTRAINT "staff_emails_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_work_patterns" ADD CONSTRAINT "staff_work_patterns_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_day_overrides" ADD CONSTRAINT "staff_day_overrides_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_holidays" ADD CONSTRAINT "staff_holidays_kitaId_fkey" FOREIGN KEY ("kitaId") REFERENCES "kitas"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_leave_accounts" ADD CONSTRAINT "staff_leave_accounts_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_leaves" ADD CONSTRAINT "staff_leaves_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_leave_days" ADD CONSTRAINT "staff_leave_days_leaveId_fkey" FOREIGN KEY ("leaveId") REFERENCES "staff_leaves"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_time_entries" ADD CONSTRAINT "staff_time_entries_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_weeks" ADD CONSTRAINT "staff_weeks_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_adjustments" ADD CONSTRAINT "staff_adjustments_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_history" ADD CONSTRAINT "staff_history_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_notifications" ADD CONSTRAINT "staff_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "staff_notifications" ADD CONSTRAINT "staff_notifications_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "staff_profiles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
COMMIT;
|