145 lines
4.6 KiB
SQL
145 lines
4.6 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "roles" AS ENUM ('ADMIN', 'SUPERVISOR', 'HR', 'ACCOUNTING', 'EMPLOYEE', 'DEALER', 'CUSTOMER', 'GUEST');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "leave_types" AS ENUM ('SICK', 'VACATION', 'UNPAID', 'BEREAVEMENT', 'PARENTAL', 'LEGAL');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "leave_approval_status" AS ENUM ('PENDING', 'APPROVED', 'DENIED', 'CANCELLED', 'ESCALATED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
|
|
"first_name" TEXT NOT NULL,
|
|
"last_name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"phone_number" INTEGER NOT NULL,
|
|
"residence" TEXT,
|
|
"role" "roles" NOT NULL DEFAULT 'GUEST',
|
|
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "employees" (
|
|
"id" SERIAL NOT NULL,
|
|
"user_id" UUID NOT NULL,
|
|
"external_payroll_id" INTEGER NOT NULL,
|
|
"company_code" INTEGER NOT NULL,
|
|
"first_work_day" TIMESTAMP(3) NOT NULL,
|
|
"last_work_day" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "employees_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "customers" (
|
|
"id" SERIAL NOT NULL,
|
|
"user_id" UUID NOT NULL,
|
|
"invoice_id" INTEGER,
|
|
|
|
CONSTRAINT "customers_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leave_requests" (
|
|
"id" SERIAL NOT NULL,
|
|
"employee_id" INTEGER NOT NULL,
|
|
"leave_type" "leave_types" NOT NULL,
|
|
"start_date_time" TIMESTAMP(3) NOT NULL,
|
|
"end_date_time" TIMESTAMP(3),
|
|
"comment" TEXT NOT NULL,
|
|
"approval_status" "leave_approval_status" NOT NULL DEFAULT 'PENDING',
|
|
|
|
CONSTRAINT "leave_requests_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "timesheets" (
|
|
"id" SERIAL NOT NULL,
|
|
"employee_id" INTEGER NOT NULL,
|
|
"is_approved" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "timesheets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shifts" (
|
|
"id" SERIAL NOT NULL,
|
|
"timesheet_id" INTEGER NOT NULL,
|
|
"shift_code_id" INTEGER NOT NULL,
|
|
"date" TIMESTAMP(3) NOT NULL,
|
|
"start_time" TIMESTAMP(3) NOT NULL,
|
|
"end_time" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "shifts_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shift_codes" (
|
|
"id" SERIAL NOT NULL,
|
|
"shift_type" TEXT NOT NULL,
|
|
"bank_code" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "shift_codes_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "refresh_tokens" (
|
|
"id" TEXT NOT NULL,
|
|
"user_id" UUID NOT NULL,
|
|
"application" TEXT NOT NULL,
|
|
"access_token" TEXT NOT NULL,
|
|
"refresh_token" TEXT NOT NULL,
|
|
"access_token_expiry" TIMESTAMP(3) NOT NULL,
|
|
"refresh_token_expiry" TIMESTAMP(3),
|
|
"is_revoked" BOOLEAN NOT NULL DEFAULT false,
|
|
"scopes" JSONB NOT NULL DEFAULT '[]',
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_phone_number_key" ON "users"("phone_number");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "employees_user_id_key" ON "employees"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "customers_user_id_key" ON "customers"("user_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "customers_invoice_id_key" ON "customers"("invoice_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "refresh_tokens_access_token_key" ON "refresh_tokens"("access_token");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "refresh_tokens_refresh_token_key" ON "refresh_tokens"("refresh_token");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "employees" ADD CONSTRAINT "employees_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "customers" ADD CONSTRAINT "customers_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "leave_requests" ADD CONSTRAINT "leave_requests_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "timesheets" ADD CONSTRAINT "timesheets_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "shifts" ADD CONSTRAINT "shifts_timesheet_id_fkey" FOREIGN KEY ("timesheet_id") REFERENCES "timesheets"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "shifts" ADD CONSTRAINT "shifts_shift_code_id_fkey" FOREIGN KEY ("shift_code_id") REFERENCES "shift_codes"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|