This repository has been archived on 2026-04-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Inventory_backend/prisma/schema.prisma
2025-09-17 11:40:34 +02:00

232 lines
6.8 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
// Entités principales
model Site {
id String @id @default(cuid())
name String
contactName String @default("")
contactPhone String @default("")
contactAddress String @default("")
contactPostalCode String @default("")
contactCity String @default("")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
machines Machine[]
documents Document[] @relation("SiteDocuments")
@@map("sites")
}
model TypeMachine {
id String @id @default(cuid())
name String @unique
description String?
category String?
maintenanceFrequency String?
components Json? // Stockage de la structure hiérarchique des composants
criticalParts Json? // Stockage des pièces critiques
machinePieces Json? // Stockage des pièces de machine
specifications Json? // Stockage des spécifications techniques
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
machines Machine[]
customFields CustomField[] @relation("TypeMachineCustomFields")
@@map("type_machines")
}
model TypeComposant {
id String @id @default(cuid())
name String @unique
description String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
composants Composant[]
customFields CustomField[] @relation("TypeComposantCustomFields")
@@map("type_composants")
}
model TypePiece {
id String @id @default(cuid())
name String @unique
description String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
pieces Piece[]
customFields CustomField[] @relation("TypePieceCustomFields")
@@map("type_pieces")
}
model Machine {
id String @id @default(cuid())
name String
reference String?
constructeur String?
prix Decimal? @db.Decimal(10, 2)
emplacement String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
siteId String
site Site @relation(fields: [siteId], references: [id], onDelete: Cascade)
typeMachineId String?
typeMachine TypeMachine? @relation(fields: [typeMachineId], references: [id])
composants Composant[]
pieces Piece[]
documents Document[] @relation("MachineDocuments")
customFieldValues CustomFieldValue[] @relation("MachineCustomFieldValues")
@@map("machines")
}
model Composant {
id String @id @default(cuid())
name String
reference String?
constructeur String?
prix Decimal? @db.Decimal(10, 2)
emplacement String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations hiérarchiques
machineId String?
machine Machine? @relation(fields: [machineId], references: [id], onDelete: Cascade)
parentComposantId String?
parentComposant Composant? @relation("ComposantHierarchy", fields: [parentComposantId], references: [id], onDelete: Cascade)
sousComposants Composant[] @relation("ComposantHierarchy")
typeComposantId String?
typeComposant TypeComposant? @relation(fields: [typeComposantId], references: [id])
pieces Piece[]
documents Document[] @relation("ComposantDocuments")
customFieldValues CustomFieldValue[] @relation("ComposantCustomFieldValues")
@@map("composants")
}
model Piece {
id String @id @default(cuid())
name String
reference String?
constructeur String?
prix Decimal? @db.Decimal(10, 2)
emplacement String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
machineId String?
machine Machine? @relation(fields: [machineId], references: [id], onDelete: Cascade)
composantId String?
composant Composant? @relation(fields: [composantId], references: [id], onDelete: Cascade)
typePieceId String?
typePiece TypePiece? @relation(fields: [typePieceId], references: [id])
documents Document[] @relation("PieceDocuments")
customFieldValues CustomFieldValue[] @relation("PieceCustomFieldValues")
@@map("pieces")
}
model Document {
id String @id @default(cuid())
name String
filename String
path String
mimeType String
size Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations polymorphiques
machineId String?
machine Machine? @relation("MachineDocuments", fields: [machineId], references: [id], onDelete: Cascade)
composantId String?
composant Composant? @relation("ComposantDocuments", fields: [composantId], references: [id], onDelete: Cascade)
pieceId String?
piece Piece? @relation("PieceDocuments", fields: [pieceId], references: [id], onDelete: Cascade)
siteId String?
site Site? @relation("SiteDocuments", fields: [siteId], references: [id], onDelete: Cascade)
@@map("documents")
}
model CustomField {
id String @id @default(cuid())
name String
type String // 'string', 'number', 'boolean', 'date'
required Boolean @default(false)
defaultValue String?
options String[] // Pour les champs de type SELECT
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations polymorphiques pour les types
typeMachineId String?
typeMachine TypeMachine? @relation("TypeMachineCustomFields", fields: [typeMachineId], references: [id], onDelete: Cascade)
typeComposantId String?
typeComposant TypeComposant? @relation("TypeComposantCustomFields", fields: [typeComposantId], references: [id], onDelete: Cascade)
typePieceId String?
typePiece TypePiece? @relation("TypePieceCustomFields", fields: [typePieceId], references: [id], onDelete: Cascade)
// Relations avec les valeurs
customFieldValues CustomFieldValue[]
@@map("custom_fields")
}
model CustomFieldValue {
id String @id @default(cuid())
value String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
customFieldId String
customField CustomField @relation(fields: [customFieldId], references: [id], onDelete: Cascade)
machineId String?
machine Machine? @relation("MachineCustomFieldValues", fields: [machineId], references: [id], onDelete: Cascade)
composantId String?
composant Composant? @relation("ComposantCustomFieldValues", fields: [composantId], references: [id], onDelete: Cascade)
pieceId String?
piece Piece? @relation("PieceCustomFieldValues", fields: [pieceId], references: [id], onDelete: Cascade)
@@map("custom_field_values")
}