Files
Lyra/web/prisma/schema.prisma
T
Jonathan f2dbef047c feat: WatchedArtist.showAllTypes toggle (default false)
Adds the per-artist release-type filter toggle: off (default) restricts
a discography view to core studio releases, on shows everything
(live, compilations, etc.).
2026-07-11 18:03:29 +02:00

126 lines
3.3 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)
showAllTypes 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[]
}