216 lines
7.3 KiB
SQL
216 lines
7.3 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('ADMIN', 'DIRECTOR', 'MECHANIC', 'WORKER', 'OTHER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RepairStatus" AS ENUM ('RECEIVED', 'DIAGNOSIS', 'WAITING_APPROVAL', 'WAITING_PARTS', 'IN_WORK', 'ISSUED', 'CANCELED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"password" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"role" "Role" NOT NULL DEFAULT 'OTHER',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Contractor" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"inn" TEXT,
|
|
"address" TEXT,
|
|
"phone" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Contractor_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Unit" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Unit_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "UnitIdentifier" (
|
|
"id" TEXT NOT NULL,
|
|
"unitId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"validFrom" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"validTo" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "UnitIdentifier_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RepairOrder" (
|
|
"id" TEXT NOT NULL,
|
|
"unitId" TEXT NOT NULL,
|
|
"contractorId" TEXT NOT NULL,
|
|
"status" "RepairStatus" NOT NULL DEFAULT 'RECEIVED',
|
|
"description" TEXT,
|
|
"issuedAt" TIMESTAMP(3),
|
|
"warrantyFrom" TIMESTAMP(3),
|
|
"warrantyTo" TIMESTAMP(3),
|
|
"warrantyDays" INTEGER,
|
|
"version" INTEGER NOT NULL DEFAULT 1,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "RepairOrder_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RepairOrderAssignee" (
|
|
"id" TEXT NOT NULL,
|
|
"repairOrderId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "RepairOrderAssignee_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Trip" (
|
|
"id" TEXT NOT NULL,
|
|
"contractorId" TEXT NOT NULL,
|
|
"serviceObjectId" TEXT,
|
|
"description" TEXT,
|
|
"scheduledFor" TIMESTAMP(3) NOT NULL,
|
|
"completedAt" TIMESTAMP(3),
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Trip_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ServiceObject" (
|
|
"id" TEXT NOT NULL,
|
|
"contractorId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"address" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ServiceObject_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Calculation" (
|
|
"id" TEXT NOT NULL,
|
|
"repairOrderId" TEXT NOT NULL,
|
|
"templateId" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Calculation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CalculationTemplate" (
|
|
"id" TEXT NOT NULL,
|
|
"contractorId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "CalculationTemplate_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CalculationItem" (
|
|
"id" TEXT NOT NULL,
|
|
"calculationId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"quantity" DOUBLE PRECISION NOT NULL,
|
|
"unit" TEXT NOT NULL,
|
|
"price" DOUBLE PRECISION,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "CalculationItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "UnitIdentifier_unitId_type_value_validFrom_key" ON "UnitIdentifier"("unitId", "type", "value", "validFrom");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RepairOrder_status_idx" ON "RepairOrder"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RepairOrder_contractorId_idx" ON "RepairOrder"("contractorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RepairOrder_unitId_idx" ON "RepairOrder"("unitId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RepairOrderAssignee_repairOrderId_userId_key" ON "RepairOrderAssignee"("repairOrderId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Trip_scheduledFor_idx" ON "Trip"("scheduledFor");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Calculation_repairOrderId_key" ON "Calculation"("repairOrderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalculationItem_calculationId_type_idx" ON "CalculationItem"("calculationId", "type");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "UnitIdentifier" ADD CONSTRAINT "UnitIdentifier_unitId_fkey" FOREIGN KEY ("unitId") REFERENCES "Unit"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RepairOrder" ADD CONSTRAINT "RepairOrder_unitId_fkey" FOREIGN KEY ("unitId") REFERENCES "Unit"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RepairOrder" ADD CONSTRAINT "RepairOrder_contractorId_fkey" FOREIGN KEY ("contractorId") REFERENCES "Contractor"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RepairOrderAssignee" ADD CONSTRAINT "RepairOrderAssignee_repairOrderId_fkey" FOREIGN KEY ("repairOrderId") REFERENCES "RepairOrder"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RepairOrderAssignee" ADD CONSTRAINT "RepairOrderAssignee_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_contractorId_fkey" FOREIGN KEY ("contractorId") REFERENCES "Contractor"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_serviceObjectId_fkey" FOREIGN KEY ("serviceObjectId") REFERENCES "ServiceObject"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ServiceObject" ADD CONSTRAINT "ServiceObject_contractorId_fkey" FOREIGN KEY ("contractorId") REFERENCES "Contractor"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Calculation" ADD CONSTRAINT "Calculation_repairOrderId_fkey" FOREIGN KEY ("repairOrderId") REFERENCES "RepairOrder"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Calculation" ADD CONSTRAINT "Calculation_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "CalculationTemplate"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CalculationTemplate" ADD CONSTRAINT "CalculationTemplate_contractorId_fkey" FOREIGN KEY ("contractorId") REFERENCES "Contractor"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CalculationItem" ADD CONSTRAINT "CalculationItem_calculationId_fkey" FOREIGN KEY ("calculationId") REFERENCES "Calculation"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|