MAI CALL - step 1
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "MaintenanceRequestStatus" AS ENUM ('OPEN', 'CLAIMED', 'RESOLVED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "MaintenanceRequest" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenantId" TEXT NOT NULL,
|
||||
"workstationId" TEXT NOT NULL,
|
||||
"reportedByUserId" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL,
|
||||
"photoKey" TEXT,
|
||||
"status" "MaintenanceRequestStatus" NOT NULL DEFAULT 'OPEN',
|
||||
"clientRequestId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"claimedByUserId" TEXT,
|
||||
"claimedAt" TIMESTAMP(3),
|
||||
"resolvedByUserId" TEXT,
|
||||
"resolvedAt" TIMESTAMP(3),
|
||||
"resolutionNote" TEXT,
|
||||
|
||||
CONSTRAINT "MaintenanceRequest_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MaintenanceRequest_tenantId_status_createdAt_idx" ON "MaintenanceRequest"("tenantId", "status", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MaintenanceRequest_tenantId_reportedByUserId_idx" ON "MaintenanceRequest"("tenantId", "reportedByUserId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MaintenanceRequest_tenantId_clientRequestId_key" ON "MaintenanceRequest"("tenantId", "clientRequestId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MaintenanceRequest" ADD CONSTRAINT "MaintenanceRequest_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MaintenanceRequest" ADD CONSTRAINT "MaintenanceRequest_workstationId_fkey" FOREIGN KEY ("workstationId") REFERENCES "Workstation"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MaintenanceRequest" ADD CONSTRAINT "MaintenanceRequest_reportedByUserId_fkey" FOREIGN KEY ("reportedByUserId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MaintenanceRequest" ADD CONSTRAINT "MaintenanceRequest_claimedByUserId_fkey" FOREIGN KEY ("claimedByUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MaintenanceRequest" ADD CONSTRAINT "MaintenanceRequest_resolvedByUserId_fkey" FOREIGN KEY ("resolvedByUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -19,14 +19,21 @@ enum UserRole {
|
||||
OPERATOR
|
||||
}
|
||||
|
||||
enum MaintenanceRequestStatus {
|
||||
OPEN
|
||||
CLAIMED
|
||||
RESOLVED
|
||||
}
|
||||
|
||||
model Tenant {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
users User[]
|
||||
workstations Workstation[]
|
||||
events DomainEvent[]
|
||||
users User[]
|
||||
workstations Workstation[]
|
||||
events DomainEvent[]
|
||||
maintenanceRequests MaintenanceRequest[]
|
||||
}
|
||||
|
||||
model User {
|
||||
@@ -39,6 +46,10 @@ model User {
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
||||
|
||||
reportedRequests MaintenanceRequest[] @relation("reported")
|
||||
claimedRequests MaintenanceRequest[] @relation("claimed")
|
||||
resolvedRequests MaintenanceRequest[] @relation("resolved")
|
||||
|
||||
@@unique([tenantId, email])
|
||||
@@index([tenantId])
|
||||
}
|
||||
@@ -50,7 +61,8 @@ model Workstation {
|
||||
name String
|
||||
area String
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
||||
maintenanceRequests MaintenanceRequest[]
|
||||
|
||||
@@unique([tenantId, code])
|
||||
@@index([tenantId])
|
||||
@@ -72,3 +84,32 @@ model DomainEvent {
|
||||
@@index([tenantId, processedAt])
|
||||
@@index([tenantId, aggregateType, aggregateId])
|
||||
}
|
||||
|
||||
model MaintenanceRequest {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
workstationId String
|
||||
reportedByUserId String
|
||||
description String
|
||||
photoKey String?
|
||||
status MaintenanceRequestStatus @default(OPEN)
|
||||
clientRequestId String
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
claimedByUserId String?
|
||||
claimedAt DateTime?
|
||||
|
||||
resolvedByUserId String?
|
||||
resolvedAt DateTime?
|
||||
resolutionNote String?
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
||||
workstation Workstation @relation(fields: [workstationId], references: [id])
|
||||
reportedBy User @relation("reported", fields: [reportedByUserId], references: [id])
|
||||
claimedBy User? @relation("claimed", fields: [claimedByUserId], references: [id])
|
||||
resolvedBy User? @relation("resolved", fields: [resolvedByUserId], references: [id])
|
||||
|
||||
@@unique([tenantId, clientRequestId])
|
||||
@@index([tenantId, status, createdAt])
|
||||
@@index([tenantId, reportedByUserId])
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ import type { PrismaClient } from '@prisma/client';
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
const TENANT_SCOPED_MODELS = ['User', 'Workstation', 'DomainEvent'] as const;
|
||||
const TENANT_SCOPED_MODELS = ['User', 'Workstation', 'DomainEvent', 'MaintenanceRequest'] as const;
|
||||
type TenantScopedModel = (typeof TENANT_SCOPED_MODELS)[number];
|
||||
|
||||
function isTenantScoped(model: string | undefined): model is TenantScopedModel {
|
||||
|
||||
Reference in New Issue
Block a user