From 780e6200d877e89120c9460b1b53eccfe5505826 Mon Sep 17 00:00:00 2001 From: xCyanGrizzly Date: Tue, 24 Mar 2026 16:11:56 +0100 Subject: [PATCH] feat: add SkippedPackage model for tracking skipped/failed archives Adds SkipReason enum (SIZE_LIMIT, DOWNLOAD_FAILED, EXTRACT_FAILED, UPLOAD_FAILED) and SkippedPackage model with unique constraint on (sourceChannelId, sourceMessageId). Reverse relations added to TelegramAccount and TelegramChannel. Note: Run `npx prisma migrate dev --name add-skipped-packages` when database is available to create the migration. Co-Authored-By: Claude Opus 4.6 (1M context) --- prisma/schema.prisma | 45 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 473b0fd..8443799 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -409,9 +409,10 @@ model TelegramAccount { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - channelMaps AccountChannelMap[] - ingestionRuns IngestionRun[] - fetchRequests ChannelFetchRequest[] + channelMaps AccountChannelMap[] + ingestionRuns IngestionRun[] + fetchRequests ChannelFetchRequest[] + skippedPackages SkippedPackage[] @@index([isActive]) @@map("telegram_accounts") @@ -428,8 +429,9 @@ model TelegramChannel { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - accountMaps AccountChannelMap[] - packages Package[] + accountMaps AccountChannelMap[] + packages Package[] + skippedPackages SkippedPackage[] @@index([type, isActive]) @@index([category]) @@ -686,6 +688,39 @@ model ArchiveExtractRequest { @@map("archive_extract_requests") } +// ─────────────────────────────────────── +// Skipped/Failed Archives +// ─────────────────────────────────────── + +enum SkipReason { + SIZE_LIMIT + DOWNLOAD_FAILED + EXTRACT_FAILED + UPLOAD_FAILED +} + +model SkippedPackage { + id String @id @default(cuid()) + fileName String + fileSize BigInt + reason SkipReason + errorMessage String? + sourceChannelId String + sourceChannel TelegramChannel @relation(fields: [sourceChannelId], references: [id], onDelete: Cascade) + sourceMessageId BigInt + sourceTopicId BigInt? + isMultipart Boolean @default(false) + partCount Int @default(1) + accountId String + account TelegramAccount @relation(fields: [accountId], references: [id], onDelete: Cascade) + createdAt DateTime @default(now()) + + @@unique([sourceChannelId, sourceMessageId]) + @@index([reason]) + @@index([accountId]) + @@map("skipped_packages") +} + // ─────────────────────────────────────── // Purchased Kickstarters // ───────────────────────────────────────