Files
andris-carservice/prisma/schema.prisma
T
Hermes f7a9906add
Build and publish images / docker (push) Canceled after 0s
carservice: initial commit
2026-07-20 20:51:23 +01:00

130 lines
3.6 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
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?
}