From a5bba9a11b1b23a53637537dce9f013b3d600b3d Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 29 Jun 2025 23:05:36 -0600 Subject: [PATCH] refactor: update volume backup schema and form handling - Modified the volume backup schema to enforce non-null constraints on volumeName and added serviceName. - Removed unnecessary fields (type, hostPath) from the schema and updated related API and form handling. - Enhanced form validation to ensure required fields are properly checked. - Updated the UI components to reflect changes in the volume backup management interface. --- .../volume-backups/handle-volume-backups.tsx | 142 +- .../dokploy/drizzle/0104_robust_nighthawk.sql | 4 + .../dokploy/drizzle/0105_unknown_firelord.sql | 1 + apps/dokploy/drizzle/meta/0104_snapshot.json | 6061 ++++++++++++++++ apps/dokploy/drizzle/meta/0105_snapshot.json | 6067 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 14 + .../server/api/routers/volume-backups.ts | 2 +- .../server/src/db/schema/volume-backups.ts | 15 +- 8 files changed, 12279 insertions(+), 27 deletions(-) create mode 100644 apps/dokploy/drizzle/0104_robust_nighthawk.sql create mode 100644 apps/dokploy/drizzle/0105_unknown_firelord.sql create mode 100644 apps/dokploy/drizzle/meta/0104_snapshot.json create mode 100644 apps/dokploy/drizzle/meta/0105_snapshot.json diff --git a/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx index 14ff498ba..a9e9e6aeb 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx @@ -53,16 +53,12 @@ const formSchema = z .object({ name: z.string().min(1, "Name is required"), cronExpression: z.string().min(1, "Cron expression is required"), - volumeName: z.string(), - hostPath: z.string(), + volumeName: z.string().min(1, "Volume name is required"), prefix: z.string(), keepLatestCount: z.coerce.number().optional(), turnOff: z.boolean().default(false), - volumeBackupType: z.enum(["bind", "volume"]), enabled: z.boolean().default(true), - serviceName: z.string(), - destinationId: z.string().min(1, "Destination required"), - scheduleType: z.enum([ + serviceType: z.enum([ "application", "compose", "postgres", @@ -71,9 +67,11 @@ const formSchema = z "mysql", "redis", ]), + serviceName: z.string(), + destinationId: z.string().min(1, "Destination required"), }) .superRefine((data, ctx) => { - if (data.scheduleType === "compose" && !data.serviceName) { + if (data.serviceType === "compose" && !data.serviceName) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: "Service name is required", @@ -110,18 +108,17 @@ export const HandleVolumeBackups = ({ name: "", cronExpression: "", volumeName: "", - hostPath: "", prefix: "", keepLatestCount: undefined, turnOff: false, - volumeBackupType: "volume", enabled: true, serviceName: "", + serviceType: volumeBackupType, }, }); - const scheduleTypeForm = form.watch("scheduleType"); - + const serviceTypeForm = volumeBackupType; + const { data: destinations } = api.destination.all.useQuery(); const { data: volumeBackup } = api.volumeBackups.one.useQuery( { volumeBackupId: volumeBackupId || "" }, { enabled: !!volumeBackupId }, @@ -150,14 +147,13 @@ export const HandleVolumeBackups = ({ name: volumeBackup.name, cronExpression: volumeBackup.cronExpression, volumeName: volumeBackup.volumeName || "", - hostPath: volumeBackup.hostPath || "", prefix: volumeBackup.prefix, - keepLatestCount: volumeBackup.keepLatestCount, + keepLatestCount: volumeBackup.keepLatestCount || undefined, turnOff: volumeBackup.turnOff, - volumeBackupType: volumeBackup.type, - enabled: volumeBackup.enabled, + enabled: volumeBackup.enabled || true, serviceName: volumeBackup.serviceName || "", destinationId: volumeBackup.destinationId, + serviceType: volumeBackup.serviceType, }); } }, [form, volumeBackup, volumeBackupId]); @@ -173,6 +169,7 @@ export const HandleVolumeBackups = ({ ...values, destinationId: values.destinationId, volumeBackupId: volumeBackupId || "", + serviceType: volumeBackupType, ...(volumeBackupType === "application" && { applicationId: id || "", }), @@ -251,7 +248,7 @@ export const HandleVolumeBackups = ({