feat: monitoring data model (WatchedArtist, MonitoredRelease, Request link)

This commit is contained in:
Jonathan
2026-07-11 12:07:09 +02:00
parent 915bd96cd3
commit ec85016d88
4 changed files with 169 additions and 0 deletions
@@ -0,0 +1,51 @@
-- CreateEnum
CREATE TYPE "MonitoredReleaseState" AS ENUM ('wanted', 'grabbed', 'fulfilled');
-- AlterTable
ALTER TABLE "Request" ADD COLUMN "monitoredReleaseId" TEXT;
-- CreateTable
CREATE TABLE "WatchedArtist" (
"id" TEXT NOT NULL,
"mbid" TEXT NOT NULL,
"name" TEXT NOT NULL,
"autoMonitorFuture" BOOLEAN NOT NULL DEFAULT false,
"monitorFrom" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"lastPolledAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "WatchedArtist_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MonitoredRelease" (
"id" TEXT NOT NULL,
"watchedArtistId" TEXT,
"artistMbid" TEXT NOT NULL,
"artistName" TEXT NOT NULL,
"rgMbid" TEXT NOT NULL,
"album" TEXT NOT NULL,
"primaryType" TEXT,
"secondaryTypes" TEXT[],
"firstReleaseDate" TEXT,
"monitored" BOOLEAN NOT NULL DEFAULT false,
"state" "MonitoredReleaseState" NOT NULL DEFAULT 'wanted',
"currentQualityClass" INTEGER,
"firstGrabbedAt" TIMESTAMP(3),
"lastSearchedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "MonitoredRelease_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "WatchedArtist_mbid_key" ON "WatchedArtist"("mbid");
-- CreateIndex
CREATE UNIQUE INDEX "MonitoredRelease_rgMbid_key" ON "MonitoredRelease"("rgMbid");
-- AddForeignKey
ALTER TABLE "Request" ADD CONSTRAINT "Request_monitoredReleaseId_fkey" FOREIGN KEY ("monitoredReleaseId") REFERENCES "MonitoredRelease"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "MonitoredRelease" ADD CONSTRAINT "MonitoredRelease_watchedArtistId_fkey" FOREIGN KEY ("watchedArtistId") REFERENCES "WatchedArtist"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+40
View File
@@ -23,6 +23,12 @@ enum JobState {
needs_attention
}
enum MonitoredReleaseState {
wanted
grabbed
fulfilled
}
model Request {
id String @id @default(cuid())
artist String
@@ -31,6 +37,9 @@ model Request {
createdAt DateTime @default(now())
job Job?
libraryItem LibraryItem?
monitoredReleaseId String?
monitoredRelease MonitoredRelease? @relation(fields: [monitoredReleaseId], references: [id], onDelete: SetNull)
}
model Job {
@@ -82,3 +91,34 @@ model Config {
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[]
}