125 lines
3.2 KiB
Plaintext
125 lines
3.2 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
enum RequestStatus {
|
|
pending
|
|
completed
|
|
needs_attention
|
|
}
|
|
|
|
enum JobState {
|
|
requested
|
|
matching
|
|
matched
|
|
downloading
|
|
tagging
|
|
imported
|
|
needs_attention
|
|
}
|
|
|
|
enum MonitoredReleaseState {
|
|
wanted
|
|
grabbed
|
|
fulfilled
|
|
}
|
|
|
|
model Request {
|
|
id String @id @default(cuid())
|
|
artist String
|
|
album String
|
|
status RequestStatus @default(pending)
|
|
createdAt DateTime @default(now())
|
|
job Job?
|
|
libraryItem LibraryItem?
|
|
|
|
monitoredReleaseId String?
|
|
monitoredRelease MonitoredRelease? @relation(fields: [monitoredReleaseId], references: [id], onDelete: SetNull)
|
|
}
|
|
|
|
model Job {
|
|
id String @id @default(cuid())
|
|
request Request @relation(fields: [requestId], references: [id], onDelete: Cascade)
|
|
requestId String @unique
|
|
state JobState @default(requested)
|
|
currentStage String @default("intake")
|
|
attempts Int @default(0)
|
|
error String?
|
|
claimedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
candidates Candidate[]
|
|
}
|
|
|
|
model Candidate {
|
|
id String @id @default(cuid())
|
|
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade)
|
|
jobId String
|
|
source String
|
|
format String
|
|
qualityClass Int
|
|
trackCount Int
|
|
confidence Float
|
|
sourceRef String
|
|
chosen Boolean @default(false)
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model LibraryItem {
|
|
id String @id @default(cuid())
|
|
request Request @relation(fields: [requestId], references: [id], onDelete: Cascade)
|
|
requestId String @unique
|
|
artist String
|
|
album String
|
|
path String
|
|
source String
|
|
format String
|
|
qualityClass Int
|
|
importedAt DateTime @default(now())
|
|
|
|
@@unique([artist, album])
|
|
}
|
|
|
|
model Config {
|
|
key String @id
|
|
value String
|
|
secret Boolean @default(false)
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model WatchedArtist {
|
|
id String @id @default(cuid())
|
|
mbid String @unique
|
|
name String
|
|
autoMonitorFuture Boolean @default(false)
|
|
monitorFrom DateTime @default(now())
|
|
lastPolledAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
releases MonitoredRelease[]
|
|
}
|
|
|
|
model MonitoredRelease {
|
|
id String @id @default(cuid())
|
|
watchedArtist WatchedArtist? @relation(fields: [watchedArtistId], references: [id], onDelete: Cascade)
|
|
watchedArtistId String?
|
|
artistMbid String
|
|
artistName String
|
|
rgMbid String @unique
|
|
album String
|
|
primaryType String?
|
|
secondaryTypes String[]
|
|
firstReleaseDate String?
|
|
monitored Boolean @default(false)
|
|
state MonitoredReleaseState @default(wanted)
|
|
currentQualityClass Int?
|
|
firstGrabbedAt DateTime?
|
|
lastSearchedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
requests Request[]
|
|
}
|