feat: 添加图床归档任务支持,优化归档逻辑和错误处理
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
ALTER TABLE `image_generations`
|
||||
ADD COLUMN `archive_status` ENUM('NOT_REQUIRED', 'PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED') NOT NULL DEFAULT 'NOT_REQUIRED',
|
||||
ADD COLUMN `archive_attempts` INT NOT NULL DEFAULT 0,
|
||||
ADD COLUMN `archive_next_run_at` DATETIME(3) NULL,
|
||||
ADD COLUMN `archive_locked_at` DATETIME(3) NULL,
|
||||
ADD COLUMN `archive_locked_by` VARCHAR(191) NULL,
|
||||
ADD COLUMN `archive_last_error` TEXT NULL;
|
||||
|
||||
UPDATE `image_generations`
|
||||
SET `archive_status` = 'SUCCEEDED'
|
||||
WHERE `status` = 'SUCCEEDED'
|
||||
AND `hosted_image_url` IS NOT NULL;
|
||||
|
||||
UPDATE `image_generations`
|
||||
SET
|
||||
`archive_status` = 'PENDING',
|
||||
`archive_next_run_at` = CURRENT_TIMESTAMP(3)
|
||||
WHERE `status` = 'SUCCEEDED'
|
||||
AND `hosted_image_url` IS NULL
|
||||
AND `error_message` IS NULL
|
||||
AND `image_url` IS NOT NULL;
|
||||
|
||||
UPDATE `image_generations`
|
||||
SET `archive_status` = 'FAILED'
|
||||
WHERE `status` = 'SUCCEEDED'
|
||||
AND `hosted_image_url` IS NULL
|
||||
AND `error_message` IS NOT NULL;
|
||||
|
||||
CREATE INDEX `image_generations_archive_status_archive_next_run_at_idx`
|
||||
ON `image_generations`(`archive_status`, `archive_next_run_at`);
|
||||
|
||||
CREATE INDEX `image_generations_archive_locked_at_idx`
|
||||
ON `image_generations`(`archive_locked_at`);
|
||||
@@ -19,6 +19,14 @@ enum ImageGenerationStatus {
|
||||
FAILED
|
||||
}
|
||||
|
||||
enum ImageArchiveStatus {
|
||||
NOT_REQUIRED
|
||||
PENDING
|
||||
RUNNING
|
||||
SUCCEEDED
|
||||
FAILED
|
||||
}
|
||||
|
||||
model User {
|
||||
id Int @id
|
||||
username String @default("") @db.VarChar(191)
|
||||
@@ -49,6 +57,12 @@ model ImageGeneration {
|
||||
upstreamResponse Json? @map("upstream_response")
|
||||
hostedResponse Json? @map("hosted_response")
|
||||
errorMessage String? @map("error_message") @db.Text
|
||||
archiveStatus ImageArchiveStatus @default(NOT_REQUIRED) @map("archive_status")
|
||||
archiveAttempts Int @default(0) @map("archive_attempts")
|
||||
archiveNextRunAt DateTime? @map("archive_next_run_at")
|
||||
archiveLockedAt DateTime? @map("archive_locked_at")
|
||||
archiveLockedBy String? @map("archive_locked_by") @db.VarChar(191)
|
||||
archiveLastError String? @map("archive_last_error") @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
deletedAt DateTime? @map("deleted_at")
|
||||
@@ -56,6 +70,8 @@ model ImageGeneration {
|
||||
|
||||
@@index([userId, createdAt])
|
||||
@@index([status])
|
||||
@@index([archiveStatus, archiveNextRunAt])
|
||||
@@index([archiveLockedAt])
|
||||
@@index([deletedAt])
|
||||
@@map("image_generations")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user