feat(backups): добавить S3-хранилище и обновить экран бэкапов
Docker images / prepare-release (push) Successful in 9s
Docker images / backend-test (push) Successful in 2m18s
Docker images / frontend-image (push) Successful in 4m37s
Docker images / updater-image (push) Successful in 46s
Docker images / backend-image (push) Successful in 3m6s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 16s
Docker images / prepare-release (push) Successful in 9s
Docker images / backend-test (push) Successful in 2m18s
Docker images / frontend-image (push) Successful in 4m37s
Docker images / updater-image (push) Successful in 46s
Docker images / backend-image (push) Successful in 3m6s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 16s
Сохранять снимки в S3-compatible бакет, скачивать и удалять их вместе с локальными файлами. Привести /backups к DNA /servers: Frame, KPI, фильтры и реальное восстановление. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -2,6 +2,8 @@ import { z } from "zod"
|
||||
|
||||
export const backupFrequencySchema = z.enum(["daily", "weekly", "monthly"])
|
||||
export const backupFormatSchema = z.enum(["rsc", "backup"])
|
||||
export const backupStorageProviderSchema = z.enum(["local", "s3"])
|
||||
export const backupObjectStorageSchema = z.enum(["local", "s3", "both"])
|
||||
|
||||
export const backupScheduleSettingsDtoSchema = z.object({
|
||||
enabled: z.boolean(),
|
||||
@@ -32,3 +34,48 @@ export const putBackupScheduleSettingsSchema = z.object({
|
||||
})
|
||||
|
||||
export type BackupScheduleSettingsDto = z.infer<typeof backupScheduleSettingsDtoSchema>
|
||||
|
||||
export const backupStorageSettingsDtoSchema = z.object({
|
||||
provider: backupStorageProviderSchema,
|
||||
s3Endpoint: z.string(),
|
||||
s3Region: z.string(),
|
||||
s3Bucket: z.string(),
|
||||
s3Prefix: z.string(),
|
||||
s3AccessKeyId: z.string(),
|
||||
secretConfigured: z.boolean(),
|
||||
s3ForcePathStyle: z.boolean(),
|
||||
keepLocalCopy: z.boolean(),
|
||||
lastTestAt: z.string().nullable().optional(),
|
||||
lastTestError: z.string().nullable().optional(),
|
||||
updatedAt: z.string().optional(),
|
||||
})
|
||||
|
||||
export const putBackupStorageSettingsSchema = z.object({
|
||||
provider: backupStorageProviderSchema.optional(),
|
||||
s3Endpoint: z.string().optional(),
|
||||
s3Region: z.string().optional(),
|
||||
s3Bucket: z.string().optional(),
|
||||
s3Prefix: z.string().optional(),
|
||||
s3AccessKeyId: z.string().optional(),
|
||||
s3SecretAccessKey: z.string().optional(),
|
||||
s3ForcePathStyle: z.boolean().optional(),
|
||||
keepLocalCopy: z.boolean().optional(),
|
||||
})
|
||||
|
||||
export const backupItemDtoSchema = z.object({
|
||||
id: z.string(),
|
||||
serverId: z.number().nullable(),
|
||||
serverName: z.string(),
|
||||
filename: z.string(),
|
||||
sizeBytes: z.number(),
|
||||
createdAt: z.string(),
|
||||
kind: z.enum(["manual", "auto"]),
|
||||
notes: z.string().optional(),
|
||||
storage: backupObjectStorageSchema,
|
||||
s3Key: z.string().nullable().optional(),
|
||||
uploadError: z.string().nullable().optional(),
|
||||
})
|
||||
|
||||
export type BackupStorageSettingsDto = z.infer<typeof backupStorageSettingsDtoSchema>
|
||||
export type PutBackupStorageSettings = z.infer<typeof putBackupStorageSettingsSchema>
|
||||
export type BackupItemDto = z.infer<typeof backupItemDtoSchema>
|
||||
|
||||
Reference in New Issue
Block a user