generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) username String @unique password String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Car { id Int @id @default(autoincrement()) regNumber String @unique make String? model String? color String? year Int? ownerName String? ownerPhone String? ownerEmail String? vin String? engineNumber String? mileage Int? notes String? @default("") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt orders Order[] parts Part[] @@index([regNumber]) @@index([ownerName]) } model Order { id Int @id @default(autoincrement()) carId Int car Car @relation(fields: [carId], references: [id], onDelete: Cascade) status String @default("open") // open, closed mileage Int? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt tasks Task[] total Float @default(0) laborHours Float @default(0) hourlyRate Float @default(50) } model Task { id Int @id @default(autoincrement()) orderId Int order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) title String status String @default("todo") // todo, finished finishedAt DateTime? laborHours Float @default(0) hourlyRate Float @default(50) partsCost Float @default(0) laborCost Float @default(0) price Float @default(0) notes String? @default("") orderIndex Int @default(0) mileage Int? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt parts TaskPart[] @@index([status]) @@index([finishedAt]) } model Part { id Int @id @default(autoincrement()) name String manufacturer String? supplierLink String? url String? purchasePrice Float @default(0) notes String? @default("") carId Int? car Car? @relation(fields: [carId], references: [id], onDelete: SetNull) isGlobal Boolean @default(false) orderId Int? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt tasks TaskPart[] @@index([name]) } model TaskPart { id Int @id @default(autoincrement()) taskId Int task Task @relation(fields: [taskId], references: [id], onDelete: Cascade) partId Int part Part @relation(fields: [partId], references: [id], onDelete: Cascade) qty Int @default(1) price Float @default(0) @@unique([taskId, partId]) } model QuickTask { id Int @id @default(autoincrement()) title String @unique useCount Int @default(0) laborHours Float @default(0) hourlyRate Float @default(50) price Float? // manual override stored in cents/euros createdAt DateTime @default(now()) parts QuickTaskPart[] } model QuickTaskPart { id Int @id @default(autoincrement()) quickTaskId Int quickTask QuickTask @relation(fields: [quickTaskId], references: [id], onDelete: Cascade) name String qty Int @default(1) price Float @default(0) isGlobal Boolean @default(false) globalPartId Int? }