From b2218efce6b68ef1741657ed6dc538908e3b1d07 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 24 Feb 2026 19:00:30 -0600 Subject: [PATCH] refactor: update database imports to use centralized db module for improved consistency across API routes and schemas --- .../pages/api/deploy/[refreshToken].ts | 2 +- .../api/deploy/compose/[refreshToken].ts | 2 +- apps/dokploy/pages/api/deploy/github.ts | 2 +- .../pages/api/providers/github/setup.ts | 2 +- apps/dokploy/pages/api/stripe/webhook.ts | 2 +- .../dokploy/server/api/routers/application.ts | 2 +- apps/dokploy/server/api/routers/bitbucket.ts | 2 +- .../dokploy/server/api/routers/certificate.ts | 2 +- apps/dokploy/server/api/routers/compose.ts | 2 +- apps/dokploy/server/api/routers/deployment.ts | 2 +- .../dokploy/server/api/routers/destination.ts | 2 +- .../server/api/routers/git-provider.ts | 2 +- apps/dokploy/server/api/routers/gitea.ts | 2 +- apps/dokploy/server/api/routers/github.ts | 2 +- apps/dokploy/server/api/routers/gitlab.ts | 2 +- apps/dokploy/server/api/routers/mariadb.ts | 2 +- apps/dokploy/server/api/routers/mongo.ts | 2 +- apps/dokploy/server/api/routers/mysql.ts | 2 +- .../server/api/routers/notification.ts | 2 +- .../server/api/routers/organization.ts | 2 +- apps/dokploy/server/api/routers/postgres.ts | 2 +- apps/dokploy/server/api/routers/project.ts | 2 +- .../api/routers/proprietary/license-key.ts | 2 +- .../server/api/routers/proprietary/sso.ts | 2 +- apps/dokploy/server/api/routers/redis.ts | 3 +- apps/dokploy/server/api/routers/registry.ts | 2 +- apps/dokploy/server/api/routers/server.ts | 2 +- apps/dokploy/server/api/routers/settings.ts | 2 +- apps/dokploy/server/api/routers/ssh-key.ts | 2 +- apps/dokploy/server/api/trpc.ts | 4 +- apps/dokploy/server/db/index.ts | 22 --- packages/server/src/db/index.ts | 2 - packages/server/src/db/schema/deployment.ts | 126 +++++++++++------- packages/server/src/db/schema/destination.ts | 58 ++++---- packages/server/src/db/schema/patch.ts | 27 ++-- packages/server/src/db/schema/port.ts | 32 +++-- packages/server/src/db/schema/security.ts | 24 ++-- packages/server/src/db/schema/ssh-key.ts | 51 ++++--- .../server/src/db/schema/volume-backups.ts | 40 +----- 39 files changed, 225 insertions(+), 220 deletions(-) delete mode 100644 apps/dokploy/server/db/index.ts diff --git a/apps/dokploy/pages/api/deploy/[refreshToken].ts b/apps/dokploy/pages/api/deploy/[refreshToken].ts index 0a6059325..14b45f3d7 100644 --- a/apps/dokploy/pages/api/deploy/[refreshToken].ts +++ b/apps/dokploy/pages/api/deploy/[refreshToken].ts @@ -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"; diff --git a/apps/dokploy/pages/api/deploy/compose/[refreshToken].ts b/apps/dokploy/pages/api/deploy/compose/[refreshToken].ts index f41b41198..da3082bb7 100644 --- a/apps/dokploy/pages/api/deploy/compose/[refreshToken].ts +++ b/apps/dokploy/pages/api/deploy/compose/[refreshToken].ts @@ -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"; diff --git a/apps/dokploy/pages/api/deploy/github.ts b/apps/dokploy/pages/api/deploy/github.ts index ba031e71a..37850bfef 100644 --- a/apps/dokploy/pages/api/deploy/github.ts +++ b/apps/dokploy/pages/api/deploy/github.ts @@ -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"; diff --git a/apps/dokploy/pages/api/providers/github/setup.ts b/apps/dokploy/pages/api/providers/github/setup.ts index bd540058d..c09d6fba5 100644 --- a/apps/dokploy/pages/api/providers/github/setup.ts +++ b/apps/dokploy/pages/api/providers/github/setup.ts @@ -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 = { diff --git a/apps/dokploy/pages/api/stripe/webhook.ts b/apps/dokploy/pages/api/stripe/webhook.ts index f950eb344..60468bd2c 100644 --- a/apps/dokploy/pages/api/stripe/webhook.ts +++ b/apps/dokploy/pages/api/stripe/webhook.ts @@ -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!; diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index ef870ebfa..97dba570e 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/bitbucket.ts b/apps/dokploy/server/api/routers/bitbucket.ts index e3107105a..e4c58aafc 100644 --- a/apps/dokploy/server/api/routers/bitbucket.ts +++ b/apps/dokploy/server/api/routers/bitbucket.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/certificate.ts b/apps/dokploy/server/api/routers/certificate.ts index ba57ee089..095967565 100644 --- a/apps/dokploy/server/api/routers/certificate.ts +++ b/apps/dokploy/server/api/routers/certificate.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 665b6770b..f868e2ae1 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/deployment.ts b/apps/dokploy/server/api/routers/deployment.ts index d9fab404f..5aac2e8a7 100644 --- a/apps/dokploy/server/api/routers/deployment.ts +++ b/apps/dokploy/server/api/routers/deployment.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/destination.ts b/apps/dokploy/server/api/routers/destination.ts index d7cbf53d5..c1298a561 100644 --- a/apps/dokploy/server/api/routers/destination.ts +++ b/apps/dokploy/server/api/routers/destination.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/git-provider.ts b/apps/dokploy/server/api/routers/git-provider.ts index 1c3f34736..51d216043 100644 --- a/apps/dokploy/server/api/routers/git-provider.ts +++ b/apps/dokploy/server/api/routers/git-provider.ts @@ -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({ diff --git a/apps/dokploy/server/api/routers/gitea.ts b/apps/dokploy/server/api/routers/gitea.ts index 7ddd1985b..a32a8c7d9 100644 --- a/apps/dokploy/server/api/routers/gitea.ts +++ b/apps/dokploy/server/api/routers/gitea.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/github.ts b/apps/dokploy/server/api/routers/github.ts index 9e739c25c..29d5d2513 100644 --- a/apps/dokploy/server/api/routers/github.ts +++ b/apps/dokploy/server/api/routers/github.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/gitlab.ts b/apps/dokploy/server/api/routers/gitlab.ts index 1ff2b55cc..b51f056ae 100644 --- a/apps/dokploy/server/api/routers/gitlab.ts +++ b/apps/dokploy/server/api/routers/gitlab.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/mariadb.ts b/apps/dokploy/server/api/routers/mariadb.ts index 1f58eec1b..bddc71b09 100644 --- a/apps/dokploy/server/api/routers/mariadb.ts +++ b/apps/dokploy/server/api/routers/mariadb.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/mongo.ts b/apps/dokploy/server/api/routers/mongo.ts index 26880f188..e8454c8a4 100644 --- a/apps/dokploy/server/api/routers/mongo.ts +++ b/apps/dokploy/server/api/routers/mongo.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/mysql.ts b/apps/dokploy/server/api/routers/mysql.ts index 561973d68..b1bc10f32 100644 --- a/apps/dokploy/server/api/routers/mysql.ts +++ b/apps/dokploy/server/api/routers/mysql.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/notification.ts b/apps/dokploy/server/api/routers/notification.ts index 0bf25ca37..26811b194 100644 --- a/apps/dokploy/server/api/routers/notification.ts +++ b/apps/dokploy/server/api/routers/notification.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/organization.ts b/apps/dokploy/server/api/routers/organization.ts index 834c8a399..c57cf2023 100644 --- a/apps/dokploy/server/api/routers/organization.ts +++ b/apps/dokploy/server/api/routers/organization.ts @@ -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({ diff --git a/apps/dokploy/server/api/routers/postgres.ts b/apps/dokploy/server/api/routers/postgres.ts index f2aa7edfe..d9f69330c 100644 --- a/apps/dokploy/server/api/routers/postgres.ts +++ b/apps/dokploy/server/api/routers/postgres.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index 4f3bc6334..b1df68951 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/proprietary/license-key.ts b/apps/dokploy/server/api/routers/proprietary/license-key.ts index d6a770be9..9bf8cb286 100644 --- a/apps/dokploy/server/api/routers/proprietary/license-key.ts +++ b/apps/dokploy/server/api/routers/proprietary/license-key.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/proprietary/sso.ts b/apps/dokploy/server/api/routers/proprietary/sso.ts index 3acd0e48b..ac0b5f1c6 100644 --- a/apps/dokploy/server/api/routers/proprietary/sso.ts +++ b/apps/dokploy/server/api/routers/proprietary/sso.ts @@ -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 () => { diff --git a/apps/dokploy/server/api/routers/redis.ts b/apps/dokploy/server/api/routers/redis.ts index c991d11c3..dfeff82bb 100644 --- a/apps/dokploy/server/api/routers/redis.ts +++ b/apps/dokploy/server/api/routers/redis.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/registry.ts b/apps/dokploy/server/api/routers/registry.ts index 14155edfc..87f20c92e 100644 --- a/apps/dokploy/server/api/routers/registry.ts +++ b/apps/dokploy/server/api/routers/registry.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/server.ts b/apps/dokploy/server/api/routers/server.ts index 4a044ec54..9df8a5789 100644 --- a/apps/dokploy/server/api/routers/server.ts +++ b/apps/dokploy/server/api/routers/server.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index 310b5ebb4..ecc207cab 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -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, diff --git a/apps/dokploy/server/api/routers/ssh-key.ts b/apps/dokploy/server/api/routers/ssh-key.ts index 292a70ecf..45ca68bd9 100644 --- a/apps/dokploy/server/api/routers/ssh-key.ts +++ b/apps/dokploy/server/api/routers/ssh-key.ts @@ -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, diff --git a/apps/dokploy/server/api/trpc.ts b/apps/dokploy/server/api/trpc.ts index 63e0a6186..933da5b52 100644 --- a/apps/dokploy/server/api/trpc.ts +++ b/apps/dokploy/server/api/trpc.ts @@ -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 diff --git a/apps/dokploy/server/db/index.ts b/apps/dokploy/server/db/index.ts deleted file mode 100644 index 2112c4f67..000000000 --- a/apps/dokploy/server/db/index.ts +++ /dev/null @@ -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 | undefined; -} - -export let db: PostgresJsDatabase; -if (process.env.NODE_ENV === "production") { - db = drizzle(postgres(dbUrl!), { - schema, - }); -} else { - if (!global.db) - global.db = drizzle(postgres(dbUrl!), { - schema, - }); - - db = global.db; -} diff --git a/packages/server/src/db/index.ts b/packages/server/src/db/index.ts index 7a5d19267..14db4f066 100644 --- a/packages/server/src/db/index.ts +++ b/packages/server/src/db/index.ts @@ -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 { diff --git a/packages/server/src/db/schema/deployment.ts b/packages/server/src/db/schema/deployment.ts index 5f839519c..0c1b547e0 100644 --- a/packages/server/src/db/schema/deployment.ts +++ b/packages/server/src/db/schema/deployment.ts @@ -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), diff --git a/packages/server/src/db/schema/destination.ts b/packages/server/src/db/schema/destination.ts index 477f24c49..8e51aef91 100644 --- a/packages/server/src/db/schema/destination.ts +++ b/packages/server/src/db/schema/destination.ts @@ -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(), + }); diff --git a/packages/server/src/db/schema/patch.ts b/packages/server/src/db/schema/patch.ts index a4bc1b32e..c4fc1abd2 100644 --- a/packages/server/src/db/schema/patch.ts +++ b/packages/server/src/db/schema/patch.ts @@ -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), diff --git a/packages/server/src/db/schema/port.ts b/packages/server/src/db/schema/port.ts index e5fe7d313..4ba27b5e3 100644 --- a/packages/server/src/db/schema/port.ts +++ b/packages/server/src/db/schema/port.ts @@ -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(); diff --git a/packages/server/src/db/schema/security.ts b/packages/server/src/db/schema/security.ts index 3eaeed79c..b669a7900 100644 --- a/packages/server/src/db/schema/security.ts +++ b/packages/server/src/db/schema/security.ts @@ -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(); diff --git a/packages/server/src/db/schema/ssh-key.ts b/packages/server/src/db/schema/ssh-key.ts index 8e4e6ebe6..d90a921ca 100644 --- a/packages/server/src/db/schema/ssh-key.ts +++ b/packages/server/src/db/schema/ssh-key.ts @@ -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(), + ); diff --git a/packages/server/src/db/schema/volume-backups.ts b/packages/server/src/db/schema/volume-backups.ts index 8858daabe..0c6520069 100644 --- a/packages/server/src/db/schema/volume-backups.ts +++ b/packages/server/src/db/schema/volume-backups.ts @@ -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({