refactor: update database imports to use centralized db module for improved consistency across API routes and schemas

This commit is contained in:
Mauricio Siu
2026-02-24 19:00:30 -06:00
parent b027d21589
commit b2218efce6
39 changed files with 225 additions and 220 deletions

View File

@@ -4,9 +4,9 @@ import {
IS_CLOUD,
shouldDeploy,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { eq } from "drizzle-orm";
import type { NextApiRequest, NextApiResponse } from "next";
import { db } from "@/server/db";
import { applications } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup";

View File

@@ -1,7 +1,7 @@
import { IS_CLOUD, shouldDeploy } from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { eq } from "drizzle-orm";
import type { NextApiRequest, NextApiResponse } from "next";
import { db } from "@/server/db";
import { compose } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup";

View File

@@ -9,10 +9,10 @@ import {
removePreviewDeployment,
shouldDeploy,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { Webhooks } from "@octokit/webhooks";
import { and, eq } from "drizzle-orm";
import type { NextApiRequest, NextApiResponse } from "next";
import { db } from "@/server/db";
import { applications, compose, github } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup";

View File

@@ -1,8 +1,8 @@
import { createGithub } from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { eq } from "drizzle-orm";
import type { NextApiRequest, NextApiResponse } from "next";
import { Octokit } from "octokit";
import { db } from "@/server/db";
import { github } from "@/server/db/schema";
type Query = {

View File

@@ -1,9 +1,9 @@
import { buffer } from "node:stream/consumers";
import { findUserById, type Server } from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { asc, eq } from "drizzle-orm";
import type { NextApiRequest, NextApiResponse } from "next";
import Stripe from "stripe";
import { db } from "@/server/db";
import { organization, server, user } from "@/server/db/schema";
const endpointSecret = process.env.STRIPE_WEBHOOK_SECRET!;

View File

@@ -30,12 +30,12 @@ import {
writeConfigRemote,
// uploadFileSchema
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { nanoid } from "nanoid";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateApplication,
apiDeployApplication,

View File

@@ -6,9 +6,9 @@ import {
testBitbucketConnection,
updateBitbucket,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiBitbucketTestConnection,
apiCreateBitbucket,

View File

@@ -4,10 +4,10 @@ import {
IS_CLOUD,
removeCertificateById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { adminProcedure, createTRPCRouter } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateCertificate,
apiFindCertificate,

View File

@@ -33,6 +33,7 @@ import {
updateCompose,
updateDeploymentStatus,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import {
type CompleteTemplate,
fetchTemplateFiles,
@@ -47,7 +48,6 @@ import { parse } from "toml";
import { stringify } from "yaml";
import { z } from "zod";
import { slugify } from "@/lib/slug";
import { db } from "@/server/db";
import {
apiCreateCompose,
apiDeleteCompose,

View File

@@ -11,10 +11,10 @@ import {
removeDeployment,
updateDeploymentStatus,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { desc, eq } from "drizzle-orm";
import { z } from "zod";
import { db } from "@/server/db";
import {
apiFindAllByApplication,
apiFindAllByCompose,

View File

@@ -7,6 +7,7 @@ import {
removeDestinationById,
updateDestinationById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { desc, eq } from "drizzle-orm";
import {
@@ -14,7 +15,6 @@ import {
createTRPCRouter,
protectedProcedure,
} from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateDestination,
apiFindOneDestination,

View File

@@ -1,8 +1,8 @@
import { findGitProviderById, removeGitProvider } from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { and, desc, eq } from "drizzle-orm";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import { apiRemoveGitProvider, gitProvider } from "@/server/db/schema";
export const gitProviderRouter = createTRPCRouter({

View File

@@ -8,9 +8,9 @@ import {
updateGitea,
updateGitProvider,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateGitea,
apiFindGiteaBranches,

View File

@@ -6,9 +6,9 @@ import {
updateGithub,
updateGitProvider,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiFindGithubBranches,
apiFindOneGithub,

View File

@@ -8,9 +8,9 @@ import {
updateGitlab,
updateGitProvider,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateGitlab,
apiFindGitlabBranches,

View File

@@ -19,12 +19,12 @@ import {
stopServiceRemote,
updateMariadbById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { observable } from "@trpc/server/observable";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiChangeMariaDBStatus,
apiCreateMariaDB,

View File

@@ -19,11 +19,11 @@ import {
stopServiceRemote,
updateMongoById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiChangeMongoStatus,
apiCreateMongo,

View File

@@ -19,11 +19,11 @@ import {
stopServiceRemote,
updateMySqlById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiChangeMySqlStatus,
apiCreateMySql,

View File

@@ -38,6 +38,7 @@ import {
updateTeamsNotification,
updateTelegramNotification,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { desc, eq, sql } from "drizzle-orm";
import { z } from "zod";
@@ -47,7 +48,6 @@ import {
protectedProcedure,
publicProcedure,
} from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateCustom,
apiCreateDiscord,

View File

@@ -1,9 +1,9 @@
import { db } from "@dokploy/server/db";
import { IS_CLOUD } from "@dokploy/server/index";
import { TRPCError } from "@trpc/server";
import { and, desc, eq, exists } from "drizzle-orm";
import { nanoid } from "nanoid";
import { z } from "zod";
import { db } from "@/server/db";
import { invitation, member, organization } from "@/server/db/schema";
import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc";
export const organizationRouter = createTRPCRouter({

View File

@@ -20,11 +20,11 @@ import {
stopServiceRemote,
updatePostgresById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiChangePostgresStatus,
apiCreatePostgres,

View File

@@ -32,12 +32,12 @@ import {
IS_CLOUD,
updateProjectById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { and, desc, eq, sql } from "drizzle-orm";
import type { AnyPgColumn } from "drizzle-orm/pg-core";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateProject,
apiFindOneProject,

View File

@@ -1,10 +1,10 @@
import { db } from "@dokploy/server/db";
import { user } from "@dokploy/server/db/schema";
import { hasValidLicense, validateLicenseKey } from "@dokploy/server/index";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { adminProcedure, createTRPCRouter } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
activateLicenseKey,
deactivateLicenseKey,

View File

@@ -1,5 +1,6 @@
import { normalizeTrustedOrigin } from "@dokploy/server";
import { IS_CLOUD } from "@dokploy/server/constants";
import { db } from "@dokploy/server/db";
import { member, ssoProvider, user } from "@dokploy/server/db/schema";
import { ssoProviderBodySchema } from "@dokploy/server/db/schema/sso";
import {
@@ -15,7 +16,6 @@ import {
enterpriseProcedure,
publicProcedure,
} from "@/server/api/trpc";
import { db } from "@/server/db";
export const ssoRouter = createTRPCRouter({
showSignInWithSSO: publicProcedure.query(async () => {

View File

@@ -18,12 +18,11 @@ import {
stopServiceRemote,
updateRedisById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiChangeRedisStatus,
apiCreateRedis,

View File

@@ -7,9 +7,9 @@ import {
removeRegistry,
updateRegistry,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { db } from "@/server/db";
import {
apiCreateRegistry,
apiFindOneRegistry,

View File

@@ -15,13 +15,13 @@ import {
setupMonitoring,
updateServerById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { observable } from "@trpc/server/observable";
import { and, desc, eq, getTableColumns, isNotNull, sql } from "drizzle-orm";
import { z } from "zod";
import { updateServersBasedOnQuantity } from "@/pages/api/stripe/webhook";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateServer,
apiFindOneServer,

View File

@@ -45,13 +45,13 @@ import {
writeTraefikConfigInPath,
writeTraefikSetup,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { generateOpenApiDocument } from "@dokploy/trpc-openapi";
import { TRPCError } from "@trpc/server";
import { eq, sql } from "drizzle-orm";
import { scheduledJobs, scheduleJob } from "node-schedule";
import { parse, stringify } from "yaml";
import { z } from "zod";
import { db } from "@/server/db";
import {
apiAssignDomain,
apiEnableDashboard,

View File

@@ -5,10 +5,10 @@ import {
removeSSHKeyById,
updateSSHKeyById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { TRPCError } from "@trpc/server";
import { desc, eq } from "drizzle-orm";
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
import { db } from "@/server/db";
import {
apiCreateSshKey,
apiFindOneSshKey,

View File

@@ -7,6 +7,8 @@
* need to use are documented accordingly near the end.
*/
// import { getServerAuthSession } from "@/server/auth";
import { db } from "@dokploy/server/db";
import { hasValidLicense } from "@dokploy/server/index";
import { validateRequest } from "@dokploy/server/lib/auth";
import type { OpenApiMeta } from "@dokploy/trpc-openapi";
@@ -15,8 +17,6 @@ import type { CreateNextContextOptions } from "@trpc/server/adapters/next";
import type { Session, User } from "better-auth";
import superjson from "superjson";
import { ZodError } from "zod";
// import { getServerAuthSession } from "@/server/auth";
import { db } from "@/server/db";
/**
* 1. CONTEXT

View File

@@ -1,22 +0,0 @@
import { dbUrl } from "@dokploy/server/db/constants";
import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "./schema";
declare global {
var db: PostgresJsDatabase<typeof schema> | undefined;
}
export let db: PostgresJsDatabase<typeof schema>;
if (process.env.NODE_ENV === "production") {
db = drizzle(postgres(dbUrl!), {
schema,
});
} else {
if (!global.db)
global.db = drizzle(postgres(dbUrl!), {
schema,
});
db = global.db;
}

View File

@@ -1,10 +1,8 @@
import { and, eq } from "drizzle-orm";
import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import { dbUrl } from "./constants";
import * as schema from "./schema";
export { and, eq };
export * from "./schema";
declare global {

View File

@@ -126,62 +126,88 @@ const schema = createInsertSchema(deployments, {
previewDeploymentId: z.string(),
buildServerId: z.string(),
});
export const apiCreateDeployment = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
applicationId: z.string().min(1),
description: z.string().optional(),
previewDeploymentId: z.string().optional(),
});
export const apiCreateDeployment = schema
.pick({
title: true,
status: true,
logPath: true,
applicationId: true,
description: true,
previewDeploymentId: true,
})
.extend({
applicationId: z.string().min(1),
});
export const apiCreateDeploymentPreview = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
description: z.string().optional(),
previewDeploymentId: z.string().min(1),
});
export const apiCreateDeploymentPreview = schema
.pick({
title: true,
status: true,
logPath: true,
description: true,
previewDeploymentId: true,
})
.extend({
previewDeploymentId: z.string().min(1),
});
export const apiCreateDeploymentCompose = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
composeId: z.string().min(1),
description: z.string().optional(),
});
export const apiCreateDeploymentCompose = schema
.pick({
title: true,
status: true,
logPath: true,
composeId: true,
description: true,
})
.extend({
composeId: z.string().min(1),
});
export const apiCreateDeploymentBackup = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
backupId: z.string().min(1),
description: z.string().optional(),
});
export const apiCreateDeploymentBackup = schema
.pick({
title: true,
status: true,
logPath: true,
backupId: true,
description: true,
})
.extend({
backupId: z.string().min(1),
});
export const apiCreateDeploymentServer = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
serverId: z.string().min(1),
description: z.string().optional(),
});
export const apiCreateDeploymentServer = schema
.pick({
title: true,
status: true,
logPath: true,
serverId: true,
description: true,
})
.extend({
serverId: z.string().min(1),
});
export const apiCreateDeploymentSchedule = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
description: z.string().optional(),
scheduleId: z.string().min(1),
});
export const apiCreateDeploymentSchedule = schema
.pick({
title: true,
status: true,
logPath: true,
description: true,
})
.extend({
scheduleId: z.string().min(1),
});
export const apiCreateDeploymentVolumeBackup = z.object({
title: z.string().min(1),
status: z.string().default("running"),
logPath: z.string().min(1),
description: z.string().optional(),
volumeBackupId: z.string().min(1),
});
export const apiCreateDeploymentVolumeBackup = schema
.pick({
title: true,
status: true,
logPath: true,
description: true,
})
.extend({
volumeBackupId: z.string().min(1),
});
export const apiFindAllByApplication = z.object({
applicationId: z.string().min(1),

View File

@@ -46,33 +46,43 @@ const createSchema = createInsertSchema(destinations, {
region: z.string(),
});
export const apiCreateDestination = z.object({
name: z.string().min(1),
provider: z.string(),
accessKey: z.string(),
bucket: z.string(),
region: z.string(),
endpoint: z.string(),
secretAccessKey: z.string(),
serverId: z.string().optional(),
});
export const apiCreateDestination = createSchema
.pick({
name: true,
provider: true,
accessKey: true,
bucket: true,
region: true,
endpoint: true,
secretAccessKey: true,
})
.required()
.extend({
serverId: z.string().optional(),
});
export const apiFindOneDestination = z.object({
destinationId: z.string().min(1),
});
export const apiRemoveDestination = z.object({
destinationId: z.string().min(1),
});
export const apiRemoveDestination = createSchema
.pick({
destinationId: true,
})
.required();
export const apiUpdateDestination = z.object({
destinationId: z.string().min(1),
name: z.string().min(1).optional(),
accessKey: z.string().optional(),
bucket: z.string().optional(),
region: z.string().optional(),
endpoint: z.string().optional(),
provider: z.string().optional(),
secretAccessKey: z.string().optional(),
serverId: z.string().optional(),
});
export const apiUpdateDestination = createSchema
.pick({
name: true,
accessKey: true,
bucket: true,
region: true,
endpoint: true,
secretAccessKey: true,
destinationId: true,
provider: true,
})
.required()
.extend({
serverId: z.string().optional(),
});

View File

@@ -62,13 +62,13 @@ const createSchema = createInsertSchema(patch, {
composeId: z.string().optional(),
});
export const apiCreatePatch = z.object({
filePath: z.string().min(1),
content: z.string(),
type: z.enum(["create", "update", "delete"]).optional(),
enabled: z.boolean().optional(),
applicationId: z.string().optional(),
composeId: z.string().optional(),
export const apiCreatePatch = createSchema.pick({
filePath: true,
content: true,
type: true,
enabled: true,
applicationId: true,
composeId: true,
});
export const apiFindPatch = z.object({
@@ -83,13 +83,12 @@ export const apiFindPatchesByComposeId = z.object({
composeId: z.string().min(1),
});
export const apiUpdatePatch = z.object({
patchId: z.string().min(1),
filePath: z.string().min(1).optional(),
content: z.string().optional(),
type: z.enum(["create", "update", "delete"]).optional(),
enabled: z.boolean().optional(),
});
export const apiUpdatePatch = createSchema
.partial()
.extend({
patchId: z.string().min(1),
})
.omit({ applicationId: true, composeId: true });
export const apiDeletePatch = z.object({
patchId: z.string().min(1),

View File

@@ -39,22 +39,26 @@ const createSchema = createInsertSchema(ports, {
protocol: z.enum(["tcp", "udp"]).default("tcp"),
});
export const apiCreatePort = z.object({
publishedPort: z.number(),
publishMode: z.enum(["ingress", "host"]).default("ingress"),
targetPort: z.number(),
protocol: z.enum(["tcp", "udp"]).default("tcp"),
applicationId: z.string().min(1),
});
export const apiCreatePort = createSchema
.pick({
publishedPort: true,
publishMode: true,
targetPort: true,
protocol: true,
applicationId: true,
})
.required();
export const apiFindOnePort = z.object({
portId: z.string().min(1),
});
export const apiUpdatePort = z.object({
portId: z.string().min(1),
publishedPort: z.number(),
publishMode: z.enum(["ingress", "host"]),
targetPort: z.number(),
protocol: z.enum(["tcp", "udp"]),
});
export const apiUpdatePort = createSchema
.pick({
portId: true,
publishedPort: true,
publishMode: true,
targetPort: true,
protocol: true,
})
.required();

View File

@@ -42,14 +42,18 @@ export const apiFindOneSecurity = z.object({
securityId: z.string().min(1),
});
export const apiCreateSecurity = z.object({
applicationId: z.string().min(1),
username: z.string().min(1),
password: z.string().min(1),
});
export const apiCreateSecurity = createSchema
.pick({
applicationId: true,
username: true,
password: true,
})
.required();
export const apiUpdateSecurity = z.object({
securityId: z.string().min(1),
username: z.string().min(1),
password: z.string().min(1),
});
export const apiUpdateSecurity = createSchema
.pick({
securityId: true,
username: true,
password: true,
})
.required();

View File

@@ -1,5 +1,6 @@
import { relations } from "drizzle-orm";
import { pgTable, text } from "drizzle-orm/pg-core";
import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
import { sshKeyCreate, sshKeyType } from "../validations";
@@ -36,13 +37,21 @@ export const sshKeysRelations = relations(sshKeys, ({ many, one }) => ({
}),
}));
export const apiCreateSshKey = z.object({
name: z.string().min(1),
description: z.string().optional(),
organizationId: z.string().min(1),
publicKey: sshKeyCreate.shape.publicKey,
privateKey: sshKeyCreate.shape.privateKey,
});
const createSchema = createInsertSchema(
sshKeys,
/* Private key is not stored in the DB */
sshKeyCreate.omit({ privateKey: true }).shape,
);
export const apiCreateSshKey = createSchema
.pick({
name: true,
description: true,
privateKey: true,
publicKey: true,
organizationId: true,
})
.merge(sshKeyCreate.pick({ privateKey: true }));
export const apiFindOneSshKey = z.object({
sshKeyId: z.string().min(1),
@@ -50,13 +59,23 @@ export const apiFindOneSshKey = z.object({
export const apiGenerateSSHKey = sshKeyType;
export const apiRemoveSshKey = z.object({
sshKeyId: z.string().min(1),
});
export const apiRemoveSshKey = createSchema
.pick({
sshKeyId: true,
})
.required();
export const apiUpdateSshKey = z.object({
sshKeyId: z.string().min(1),
name: z.string().optional(),
description: z.string().optional(),
lastUsedAt: z.string().optional(),
});
export const apiUpdateSshKey = createSchema
.pick({
name: true,
description: true,
lastUsedAt: true,
})
.partial()
.merge(
createSchema
.pick({
sshKeyId: true,
})
.required(),
);

View File

@@ -1,5 +1,6 @@
import { relations } from "drizzle-orm";
import { boolean, integer, pgTable, text } from "drizzle-orm/pg-core";
import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
import { applications } from "./application";
@@ -104,45 +105,12 @@ export const volumeBackupsRelations = relations(
}),
);
const serviceTypeEnum = z.enum([
"application",
"postgres",
"mysql",
"mariadb",
"mongo",
"redis",
"compose",
]);
export const createVolumeBackupSchema = z.object({
name: z.string().min(1),
volumeName: z.string().min(1),
prefix: z.string().min(1),
serviceType: serviceTypeEnum.default("application"),
appName: z.string().min(1).optional(),
serviceName: z.string().optional(),
turnOff: z.boolean().default(false),
cronExpression: z.string().min(1),
keepLatestCount: z.number().optional(),
enabled: z.boolean().optional(),
applicationId: z.string().optional(),
postgresId: z.string().optional(),
mariadbId: z.string().optional(),
mongoId: z.string().optional(),
mysqlId: z.string().optional(),
redisId: z.string().optional(),
composeId: z.string().optional(),
destinationId: z.string().min(1),
export const createVolumeBackupSchema = createInsertSchema(volumeBackups).omit({
volumeBackupId: true,
});
export const updateVolumeBackupSchema = z.object({
export const updateVolumeBackupSchema = createVolumeBackupSchema.extend({
volumeBackupId: z.string().min(1),
name: z.string().min(1).optional(),
destinationId: z.string().optional(),
cronExpression: z.string().optional(),
keepLatestCount: z.number().optional(),
enabled: z.boolean().optional(),
turnOff: z.boolean().optional(),
});
export const apiFindOneVolumeBackup = z.object({