fix(prisma): remplace les enums par des String (compat SQLite)

SQLite ne supporte pas les enums Prisma. Les 6 enums (HostStatus,
HostSource, Protocol, PortState, ScanType, ScanStatus) sont
convertis en champs String avec valeurs par défaut littérales et
documentation inline des valeurs autorisées. La validation reste
assurée par Zod côté app.

Adapte aussi les mappings statusVariant des pages hosts/scans
en Record<string, BadgeVariant> avec fallback 'default'.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 14:09:57 +02:00
parent 6c020e7ee3
commit dc8dbc3cd7
3 changed files with 31 additions and 51 deletions

View File

@@ -49,10 +49,11 @@ model Host {
vendor String? // Issue du MAC (OUI) ou d'une fingerprint
osGuess String? // OS détecté / renseigné
status HostStatus @default(UNKNOWN)
// Valeurs : "UP" | "DOWN" | "UNKNOWN" (validation Zod côté app)
status String @default("UNKNOWN")
// Origine de la fiche : saisie manuelle ou découverte
source HostSource @default(MANUAL)
// Origine de la fiche : "MANUAL" | "DISCOVERED" | "IMPORTED"
source String @default("MANUAL")
// Relations
networkId String?
@@ -71,17 +72,10 @@ model Host {
@@index([status])
}
enum HostStatus {
UP
DOWN
UNKNOWN
}
enum HostSource {
MANUAL
DISCOVERED
IMPORTED
}
// NOTE : les enums Prisma ne sont pas supportés par SQLite. On stocke
// donc tous les statuts/types en `String` et on valide les valeurs
// possibles côté app via Zod. Constantes documentées au-dessus de
// chaque champ.
// =====================================================================
// Ports ouverts sur un hôte
@@ -89,10 +83,12 @@ enum HostSource {
model Port {
id String @id @default(cuid())
number Int
protocol Protocol @default(TCP)
// Valeurs : "TCP" | "UDP"
protocol String @default("TCP")
serviceName String? // ex: "http", "ssh", renseigné ou deviné
banner String? // Banner applicatif collecté
state PortState @default(OPEN)
// Valeurs : "OPEN" | "CLOSED" | "FILTERED" | "UNKNOWN"
state String @default("OPEN")
hostId String
host Host @relation(fields: [hostId], references: [id], onDelete: Cascade)
@@ -110,17 +106,8 @@ model Port {
@@index([number])
}
enum Protocol {
TCP
UDP
}
enum PortState {
OPEN
CLOSED
FILTERED
UNKNOWN
}
// Protocol : "TCP" | "UDP" — voir Port.protocol
// PortState : "OPEN" | "CLOSED" | "FILTERED" | "UNKNOWN" — voir Port.state
// =====================================================================
// Applications (Jellyfin, Home Assistant, Nextcloud, etc.)
@@ -159,9 +146,11 @@ model HostApplication {
// Découverte réseau — historique des scans
// =====================================================================
model Scan {
id String @id @default(cuid())
type ScanType
status ScanStatus @default(PENDING)
id String @id @default(cuid())
// Valeurs : "PING" | "PORT" | "ARP" | "MDNS" | "FULL"
type String
// Valeurs : "PENDING" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLED"
status String @default("PENDING")
target String // CIDR, IP, ou hôte
params String? // JSON (Zod validé côté app)
startedAt DateTime?
@@ -180,21 +169,8 @@ model Scan {
@@index([type])
}
enum ScanType {
PING
PORT
ARP
MDNS
FULL
}
enum ScanStatus {
PENDING
RUNNING
COMPLETED
FAILED
CANCELLED
}
// ScanType : "PING" | "PORT" | "ARP" | "MDNS" | "FULL" — voir Scan.type
// ScanStatus : "PENDING" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLED" — voir Scan.status
// Résultat individuel d'un scan (rattaché à un hôte quand possible)
model ScanResult {