122 行
4.6 KiB
SQL
122 行
4.6 KiB
SQL
/*
|
|
Warnings:
|
|
|
|
- Added the required column `leave_type_id` to the `leave_requests` table without a default value. This is not possible if the table is not empty.
|
|
- Added the required column `requested_days` to the `leave_requests` table without a default value. This is not possible if the table is not empty.
|
|
|
|
*/
|
|
-- CreateEnum
|
|
CREATE TYPE "LeaveDaySession" AS ENUM ('am', 'pm');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "LeaveLedgerEntryType" AS ENUM ('grant', 'reserve', 'consume', 'release', 'adjust');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "leave_requests" ADD COLUMN "attachment_mime_type" TEXT,
|
|
ADD COLUMN "attachment_original_name" TEXT,
|
|
ADD COLUMN "attachment_storage_path" TEXT,
|
|
ADD COLUMN "end_session" "LeaveDaySession" NOT NULL DEFAULT 'pm',
|
|
ADD COLUMN "leave_type_id" UUID NOT NULL,
|
|
ADD COLUMN "requested_days" DECIMAL(8,1) NOT NULL,
|
|
ADD COLUMN "start_session" "LeaveDaySession" NOT NULL DEFAULT 'am';
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leave_types" (
|
|
"id" UUID NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"requires_attachment" BOOLEAN NOT NULL DEFAULT false,
|
|
"attachment_mime_types" JSONB,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 100,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"created_by" UUID,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"updated_by" UUID,
|
|
|
|
CONSTRAINT "leave_types_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leave_policies" (
|
|
"id" UUID NOT NULL,
|
|
"leave_type_id" UUID NOT NULL,
|
|
"annual_quota_days" DECIMAL(8,1) NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"description" TEXT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"created_by" UUID,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
"updated_by" UUID,
|
|
|
|
CONSTRAINT "leave_policies_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leave_ledgers" (
|
|
"id" UUID NOT NULL,
|
|
"employee_id" UUID NOT NULL,
|
|
"leave_type_id" UUID NOT NULL,
|
|
"leave_policy_id" UUID,
|
|
"leave_request_id" UUID,
|
|
"entry_type" "LeaveLedgerEntryType" NOT NULL,
|
|
"days" DECIMAL(8,1) NOT NULL,
|
|
"period_start" DATE,
|
|
"period_end" DATE,
|
|
"note" TEXT,
|
|
"payload" JSONB,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"created_by" UUID,
|
|
|
|
CONSTRAINT "leave_ledgers_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "leave_types_code_key" ON "leave_types"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_types_enabled_sort_order" ON "leave_types"("enabled", "sort_order");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "leave_policies_leave_type_id_key" ON "leave_policies"("leave_type_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_policies_enabled" ON "leave_policies"("enabled");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_ledger_employee_type_created_at" ON "leave_ledgers"("employee_id", "leave_type_id", "created_at");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "leave_ledgers_leave_request_id_idx" ON "leave_ledgers"("leave_request_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_ledger_period" ON "leave_ledgers"("period_start", "period_end");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_ledger_entry_employee" ON "leave_ledgers"("entry_type", "employee_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "leave_requests_leave_type_id_idx" ON "leave_requests"("leave_type_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "idx_leave_owner_date_range" ON "leave_requests"("owner_id", "start_date", "end_date");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_policies" ADD CONSTRAINT "leave_policies_leave_type_id_fkey" FOREIGN KEY ("leave_type_id") REFERENCES "leave_types"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_requests" ADD CONSTRAINT "leave_requests_leave_type_id_fkey" FOREIGN KEY ("leave_type_id") REFERENCES "leave_types"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_ledgers" ADD CONSTRAINT "leave_ledgers_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_ledgers" ADD CONSTRAINT "leave_ledgers_leave_type_id_fkey" FOREIGN KEY ("leave_type_id") REFERENCES "leave_types"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_ledgers" ADD CONSTRAINT "leave_ledgers_leave_policy_id_fkey" FOREIGN KEY ("leave_policy_id") REFERENCES "leave_policies"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_ledgers" ADD CONSTRAINT "leave_ledgers_leave_request_id_fkey" FOREIGN KEY ("leave_request_id") REFERENCES "leave_requests"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|