sinka/api/prisma/tenant/schema.prisma
armando 8e4203e4c9 sinka
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 03:56:18 -03:00

148 lines
3.7 KiB
Plaintext

generator client {
provider = "prisma-client-js"
output = "../../src/generated/tenant"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
enum Role {
ADMIN
MANAGER
OPERATOR
}
enum SimulationStatus {
DRAFT
CALCULATED
ARCHIVED
}
enum ImportJobStatus {
PENDING
PROCESSING
DONE
FAILED
}
model User {
id String @id @default(uuid())
name String
email String @unique
passwordHash String
issuedPassword String?
role Role @default(OPERATOR)
googleId String? @unique
githubId String? @unique
totpSecret String?
totpEnabled Boolean @default(false)
lastLoginAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
refreshTokens RefreshToken[]
auditLogs AuditLog[]
}
model RefreshToken {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
hashed String
expiresAt DateTime
revokedAt DateTime?
createdAt DateTime @default(now())
@@index([userId])
}
model AuditLog {
id String @id @default(uuid())
userId String?
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
action String
entity String?
entityId String?
ip String?
metadata Json?
createdAt DateTime @default(now())
@@index([createdAt])
}
model Customer {
id String @id @default(uuid())
name String
document String?
email String?
phone String?
city String?
state String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
simulations FreightSimulation[]
}
model Carrier {
id String @id @default(uuid())
name String
document String?
email String?
phone String?
baseFee Decimal @default(0) @db.Decimal(10, 2)
pricePerKg Decimal @default(0) @db.Decimal(10, 2)
pricePerKm Decimal @default(0) @db.Decimal(10, 2)
adValoremRate Decimal @default(0) @db.Decimal(6, 4)
active Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model FreightSimulation {
id String @id @default(uuid())
originZip String
destinationZip String
originLabel String?
destinationLabel String?
weightKg Decimal @db.Decimal(10, 3)
widthCm Decimal @db.Decimal(8, 2)
heightCm Decimal @db.Decimal(8, 2)
lengthCm Decimal @db.Decimal(8, 2)
cargoValue Decimal @db.Decimal(12, 2)
quotedPrice Decimal? @db.Decimal(12, 2)
distanceKm Decimal? @db.Decimal(10, 2)
chargeableKg Decimal? @db.Decimal(10, 3)
bestCarrierName String?
quotes Json?
status SimulationStatus @default(DRAFT)
customerId String?
customer Customer? @relation(fields: [customerId], references: [id], onDelete: SetNull)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([createdAt])
}
model ImportJob {
id String @id @default(uuid())
filename String
status ImportJobStatus @default(PENDING)
error String?
createdAt DateTime @default(now())
finishedAt DateTime?
@@index([createdAt])
}
model OperationFile {
id String @id @default(uuid())
originalName String
storedName String
mimeType String
sizeBytes Int
createdAt DateTime @default(now())
@@index([createdAt])
}