fix(backups): сохранить идентичность фоновой задачи
This commit is contained in:
1 parent
30bd479a6f
commit
4aee2a34f1
13 files changed
+157
-12
No files matched your search
@@ -0,0 +1,14 @@
|
||||
import { z } from "zod"
|
||||
import { backupJobResponseSchema, createBackupRequestSchema } from "@mmapp/contracts/backups"
|
||||
import type { CreateBackupRequest } from "@mmapp/contracts/backups"
|
||||
const requestSchema = createBackupRequestSchema.extend({ requestId: z.string().uuid() })
|
||||
export const backupJobCheckpointSchema = z.object({ request: requestSchema, accepted: z.boolean(), job: backupJobResponseSchema.nullable() }).superRefine((value, ctx) => {
|
||||
const job = value.job
|
||||
if (job && (!value.accepted || job.id !== value.request.requestId || JSON.stringify(job.serverIds) !== JSON.stringify(value.request.serverIds.map(String)) || (job.notes ?? "") !== (value.request.notes ?? ""))) ctx.addIssue({ code: "custom", message: "Наблюдение относится к другой задаче" })
|
||||
})
|
||||
export type BackupJobCheckpoint = z.infer<typeof backupJobCheckpointSchema>
|
||||
export function createBackupJobCheckpoint(request: CreateBackupRequest, requestId: string): BackupJobCheckpoint {
|
||||
return backupJobCheckpointSchema.parse({ request: { ...request, requestId, serverIds: request.serverIds.map(String), notes: request.notes?.trim() || undefined }, accepted: false, job: null })
|
||||
}
|
||||
export function readBackupJobCheckpoint(value: string | null): BackupJobCheckpoint | null { return value ? backupJobCheckpointSchema.parse(JSON.parse(value)) : null }
|
||||
export function backupJobStorageKey(backendUrl: string) { return "mmapp:backup-job:" + backendUrl }
|
||||
Reference in new issue
Block a user