diff --git a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx index 70446e0e0..87fd354ed 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx @@ -325,7 +325,7 @@ export const AddUserPermissions = ({ userId }: Props) => { Projects Select the Projects that the user can access - + {projects?.length === 0 && (

diff --git a/apps/dokploy/pages/dashboard/project/[projectId].tsx b/apps/dokploy/pages/dashboard/project/[projectId].tsx index 20f7dcdec..bf650e09f 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId].tsx @@ -1,4 +1,4 @@ -import type { findProjectById } from "@dokploy/server"; +import type { findEnvironmentById, findProjectById } from "@dokploy/server"; import { validateRequest } from "@dokploy/server/lib/auth"; import { createServerSideHelpers } from "@trpc/react-query/server"; import { FolderInput, Loader2, PlusIcon } from "lucide-react"; @@ -10,7 +10,6 @@ import Head from "next/head"; import { useRouter } from "next/router"; import { type ReactElement, useEffect } from "react"; import superjson from "superjson"; -import { AdvancedEnvironmentSelector } from "@/components/dashboard/project/advanced-environment-selector"; import { ProjectEnvironment } from "@/components/dashboard/projects/project-environment"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; @@ -29,6 +28,127 @@ import { api } from "@/utils/api"; type Project = Awaited>; +type Environment = Awaited>; + +export type Services = { + appName: string; + serverId?: string | null; + name: string; + type: + | "mariadb" + | "application" + | "postgres" + | "mysql" + | "mongo" + | "redis" + | "compose"; + description?: string | null; + id: string; + createdAt: string; + status?: "idle" | "running" | "done" | "error"; +}; + +export const extractServices = (data: Environment | undefined) => { + const applications: Services[] = + data?.applications.map((item) => ({ + appName: item.appName, + name: item.name, + type: "application", + id: item.applicationId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const mariadb: Services[] = + data?.mariadb.map((item) => ({ + appName: item.appName, + name: item.name, + type: "mariadb", + id: item.mariadbId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const postgres: Services[] = + data?.postgres.map((item) => ({ + appName: item.appName, + name: item.name, + type: "postgres", + id: item.postgresId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const mongo: Services[] = + data?.mongo.map((item) => ({ + appName: item.appName, + name: item.name, + type: "mongo", + id: item.mongoId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const redis: Services[] = + data?.redis.map((item) => ({ + appName: item.appName, + name: item.name, + type: "redis", + id: item.redisId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const mysql: Services[] = + data?.mysql.map((item) => ({ + appName: item.appName, + name: item.name, + type: "mysql", + id: item.mysqlId, + createdAt: item.createdAt, + status: item.applicationStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + const compose: Services[] = + data?.compose.map((item) => ({ + appName: item.appName, + name: item.name, + type: "compose", + id: item.composeId, + createdAt: item.createdAt, + status: item.composeStatus, + description: item.description, + serverId: item.serverId, + })) || []; + + applications.push( + ...mysql, + ...redis, + ...mongo, + ...postgres, + ...mariadb, + ...compose, + ); + + applications.sort((a, b) => { + return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(); + }); + + return applications; +}; + const Project = ( props: InferGetServerSidePropsType, ) => { diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId].tsx index 0df40a351..931a24d87 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId].tsx @@ -230,6 +230,7 @@ export const extractServicesFromEnvironment = ( const EnvironmentPage = ( props: InferGetServerSidePropsType, ) => { + const utils = api.useUtils(); const [isBulkActionLoading, setIsBulkActionLoading] = useState(false); const { projectId, environmentId } = props; const { data: auth } = api.user.get.useQuery(); @@ -598,6 +599,9 @@ const EnvironmentPage = ( }); break; } + await utils.environment.one.invalidate({ + environmentId, + }); success++; } catch (error) { toast.error( diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index 345a4c916..953c8d122 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -126,7 +126,7 @@ export const applicationRouter = createTRPCRouter({ } const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -181,7 +181,7 @@ export const applicationRouter = createTRPCRouter({ try { if ( - application.project.organizationId !== + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ @@ -218,7 +218,7 @@ export const applicationRouter = createTRPCRouter({ const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -260,7 +260,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const service = await findApplicationById(input.applicationId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this application", @@ -280,7 +280,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const service = await findApplicationById(input.applicationId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this application", @@ -302,7 +302,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -337,7 +337,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -355,7 +355,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -380,7 +380,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -407,7 +407,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -435,7 +435,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -461,7 +461,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -487,7 +487,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -510,7 +510,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -535,7 +535,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -596,7 +596,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -610,7 +610,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -636,7 +636,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -653,7 +653,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -689,7 +689,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -704,7 +704,7 @@ export const applicationRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -740,7 +740,7 @@ export const applicationRouter = createTRPCRouter({ const app = await findApplicationById(input.applicationId as string); - if (app.project.organizationId !== ctx.session.activeOrganizationId) { + if (app.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this application", @@ -783,7 +783,7 @@ export const applicationRouter = createTRPCRouter({ const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -825,7 +825,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( - application.project.organizationId !== ctx.session.activeOrganizationId + application.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 7ed07081b..81556486e 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -121,7 +121,7 @@ export const composeRouter = createTRPCRouter({ } const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -172,7 +172,7 @@ export const composeRouter = createTRPCRouter({ .input(apiUpdateCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this compose", @@ -194,7 +194,7 @@ export const composeRouter = createTRPCRouter({ const composeResult = await findComposeById(input.composeId); if ( - composeResult.project.organizationId !== + composeResult.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ @@ -227,7 +227,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to clean this compose", @@ -240,7 +240,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFetchServices) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to load this compose", @@ -257,7 +257,7 @@ export const composeRouter = createTRPCRouter({ ) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to load this compose", @@ -276,7 +276,7 @@ export const composeRouter = createTRPCRouter({ const compose = await findComposeById(input.composeId); if ( - compose.project.organizationId !== ctx.session.activeOrganizationId + compose.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -302,7 +302,7 @@ export const composeRouter = createTRPCRouter({ .input(apiRandomizeCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to randomize this compose", @@ -314,7 +314,7 @@ export const composeRouter = createTRPCRouter({ .input(apiRandomizeCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to randomize this compose", @@ -329,7 +329,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to get this compose", @@ -347,7 +347,7 @@ export const composeRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this compose", @@ -380,7 +380,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to redeploy this compose", @@ -412,7 +412,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this compose", @@ -426,7 +426,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this compose", @@ -441,7 +441,7 @@ export const composeRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to get this compose", @@ -454,7 +454,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to refresh this compose", @@ -599,7 +599,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to disconnect this git provider", @@ -660,7 +660,7 @@ export const composeRouter = createTRPCRouter({ ) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to move this compose", @@ -706,7 +706,7 @@ export const composeRouter = createTRPCRouter({ const compose = await findComposeById(input.composeId); if ( - compose.project.organizationId !== ctx.session.activeOrganizationId + compose.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -777,7 +777,7 @@ export const composeRouter = createTRPCRouter({ ); if ( - compose.project.organizationId !== ctx.session.activeOrganizationId + compose.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", diff --git a/apps/dokploy/server/api/routers/mariadb.ts b/apps/dokploy/server/api/routers/mariadb.ts index ab13ea9b8..399d57dcd 100644 --- a/apps/dokploy/server/api/routers/mariadb.ts +++ b/apps/dokploy/server/api/routers/mariadb.ts @@ -107,7 +107,7 @@ export const mariadbRouter = createTRPCRouter({ ); } const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this Mariadb", @@ -120,7 +120,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiFindOneMariaDB) .mutation(async ({ input, ctx }) => { const service = await findMariadbById(input.mariadbId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this Mariadb", @@ -157,7 +157,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiSaveExternalPortMariaDB) .mutation(async ({ input, ctx }) => { const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -173,7 +173,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiDeployMariaDB) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Mariadb", @@ -194,7 +194,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiDeployMariaDB) .subscription(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Mariadb", @@ -211,7 +211,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiChangeMariaDBStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this Mariadb status", @@ -235,7 +235,7 @@ export const mariadbRouter = createTRPCRouter({ } const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this Mariadb", @@ -261,7 +261,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMariaDB) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -284,7 +284,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiResetMariadb) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this Mariadb", @@ -314,7 +314,7 @@ export const mariadbRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mariadbId, ...rest } = input; const mariadb = await findMariadbById(mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this Mariadb", @@ -342,7 +342,7 @@ export const mariadbRouter = createTRPCRouter({ ) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to move this mariadb", @@ -380,7 +380,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiRebuildMariadb) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to rebuild this MariaDB database", diff --git a/apps/dokploy/server/api/routers/mongo.ts b/apps/dokploy/server/api/routers/mongo.ts index f40401c1b..843e1b677 100644 --- a/apps/dokploy/server/api/routers/mongo.ts +++ b/apps/dokploy/server/api/routers/mongo.ts @@ -112,7 +112,7 @@ export const mongoRouter = createTRPCRouter({ } const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this mongo", @@ -126,7 +126,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const service = await findMongoById(input.mongoId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this mongo", @@ -149,7 +149,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this mongo", @@ -171,7 +171,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiSaveExternalPortMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -187,7 +187,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiDeployMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this mongo", @@ -207,7 +207,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiDeployMongo) .subscription(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this mongo", @@ -224,7 +224,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiChangeMongoStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this mongo status", @@ -239,7 +239,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiResetMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this mongo", @@ -278,7 +278,7 @@ export const mongoRouter = createTRPCRouter({ const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this mongo", @@ -304,7 +304,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -328,7 +328,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mongoId, ...rest } = input; const mongo = await findMongoById(mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this mongo", @@ -356,7 +356,7 @@ export const mongoRouter = createTRPCRouter({ ) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to move this mongo", @@ -394,7 +394,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiRebuildMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to rebuild this MongoDB database", diff --git a/apps/dokploy/server/api/routers/mysql.ts b/apps/dokploy/server/api/routers/mysql.ts index 1a6d4af9d..bfe839303 100644 --- a/apps/dokploy/server/api/routers/mysql.ts +++ b/apps/dokploy/server/api/routers/mysql.ts @@ -113,7 +113,7 @@ export const mysqlRouter = createTRPCRouter({ ); } const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this MySQL", @@ -126,7 +126,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { const service = await findMySqlById(input.mysqlId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this MySQL", @@ -148,7 +148,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this MySQL", @@ -169,7 +169,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiSaveExternalPortMySql) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -185,7 +185,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiDeployMySql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this MySQL", @@ -205,7 +205,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiDeployMySql) .subscription(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this MySQL", @@ -222,7 +222,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiChangeMySqlStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this MySQL status", @@ -237,7 +237,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiResetMysql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this MySQL", @@ -273,7 +273,7 @@ export const mysqlRouter = createTRPCRouter({ ); } const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this MySQL", @@ -299,7 +299,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMySql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -323,7 +323,7 @@ export const mysqlRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mysqlId, ...rest } = input; const mysql = await findMySqlById(mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this MySQL", @@ -351,7 +351,7 @@ export const mysqlRouter = createTRPCRouter({ ) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to move this mysql", @@ -389,7 +389,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiRebuildMysql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to rebuild this MySQL database", diff --git a/apps/dokploy/server/api/routers/postgres.ts b/apps/dokploy/server/api/routers/postgres.ts index d932f355a..b3dc8bd1a 100644 --- a/apps/dokploy/server/api/routers/postgres.ts +++ b/apps/dokploy/server/api/routers/postgres.ts @@ -113,7 +113,7 @@ export const postgresRouter = createTRPCRouter({ const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -128,7 +128,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const service = await findPostgresById(input.postgresId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.environment.project.organizationId !== ctx.session.activeOrganizationId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this Postgres", @@ -151,7 +151,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -175,7 +175,7 @@ export const postgresRouter = createTRPCRouter({ const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -193,7 +193,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -216,7 +216,7 @@ export const postgresRouter = createTRPCRouter({ .subscription(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -235,7 +235,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -261,7 +261,7 @@ export const postgresRouter = createTRPCRouter({ const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -286,7 +286,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -311,7 +311,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -343,7 +343,7 @@ export const postgresRouter = createTRPCRouter({ const { postgresId, ...rest } = input; const postgres = await findPostgresById(postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -373,7 +373,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -413,7 +413,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId + postgres.environment.project.organizationId !== ctx.session.activeOrganizationId ) { throw new TRPCError({ code: "UNAUTHORIZED", diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 50b519db3..ac18b2d01 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -106,7 +106,11 @@ export const findApplicationById = async (applicationId: string) => { const application = await db.query.applications.findFirst({ where: eq(applications.applicationId, applicationId), with: { - environment: true, + environment: { + with: { + project: true, + }, + }, domains: true, deployments: true, mounts: true, diff --git a/packages/server/src/services/compose.ts b/packages/server/src/services/compose.ts index bb1b2e8a0..bfe8d01d0 100644 --- a/packages/server/src/services/compose.ts +++ b/packages/server/src/services/compose.ts @@ -126,7 +126,11 @@ export const findComposeById = async (composeId: string) => { const result = await db.query.compose.findFirst({ where: eq(compose.composeId, composeId), with: { - project: true, + environment: { + with: { + project: true, + }, + }, deployments: true, mounts: true, domains: true, @@ -222,7 +226,7 @@ export const deployCompose = async ({ const compose = await findComposeById(composeId); const buildLink = `${await getDokployUrl()}/dashboard/project/${ - compose.projectId + compose.environment.projectId }/services/compose/${compose.composeId}?tab=deployments`; const deployment = await createDeploymentCompose({ composeId: composeId, @@ -255,11 +259,11 @@ export const deployCompose = async ({ }); await sendBuildSuccessNotifications({ - projectName: compose.project.name, + projectName: compose.environment.project.name, applicationName: compose.name, applicationType: "compose", buildLink, - organizationId: compose.project.organizationId, + organizationId: compose.environment.project.organizationId, domains: compose.domains, }); } catch (error) { @@ -268,13 +272,13 @@ export const deployCompose = async ({ composeStatus: "error", }); await sendBuildErrorNotifications({ - projectName: compose.project.name, + projectName: compose.environment.project.name, applicationName: compose.name, applicationType: "compose", // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: compose.project.organizationId, + organizationId: compose.environment.project.organizationId, }); throw error; } @@ -330,7 +334,7 @@ export const deployRemoteCompose = async ({ const compose = await findComposeById(composeId); const buildLink = `${await getDokployUrl()}/dashboard/project/${ - compose.projectId + compose.environment.projectId }/services/compose/${compose.composeId}?tab=deployments`; const deployment = await createDeploymentCompose({ composeId: composeId, @@ -387,11 +391,11 @@ export const deployRemoteCompose = async ({ }); await sendBuildSuccessNotifications({ - projectName: compose.project.name, + projectName: compose.environment.project.name, applicationName: compose.name, applicationType: "compose", buildLink, - organizationId: compose.project.organizationId, + organizationId: compose.environment.project.organizationId, domains: compose.domains, }); } catch (error) { @@ -410,13 +414,13 @@ export const deployRemoteCompose = async ({ composeStatus: "error", }); await sendBuildErrorNotifications({ - projectName: compose.project.name, + projectName: compose.environment.project.name, applicationName: compose.name, applicationType: "compose", // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: compose.project.organizationId, + organizationId: compose.environment.project.organizationId, }); throw error; } diff --git a/packages/server/src/services/mariadb.ts b/packages/server/src/services/mariadb.ts index b664e1593..8aac45346 100644 --- a/packages/server/src/services/mariadb.ts +++ b/packages/server/src/services/mariadb.ts @@ -56,7 +56,11 @@ export const findMariadbById = async (mariadbId: string) => { const result = await db.query.mariadb.findFirst({ where: eq(mariadb.mariadbId, mariadbId), with: { - project: true, + environment: { + with: { + project: true, + }, + }, mounts: true, server: true, backups: { diff --git a/packages/server/src/services/mongo.ts b/packages/server/src/services/mongo.ts index a760a1669..d52b2445e 100644 --- a/packages/server/src/services/mongo.ts +++ b/packages/server/src/services/mongo.ts @@ -53,7 +53,11 @@ export const findMongoById = async (mongoId: string) => { const result = await db.query.mongo.findFirst({ where: eq(mongo.mongoId, mongoId), with: { - project: true, + environment: { + with: { + project: true, + }, + }, mounts: true, server: true, backups: { diff --git a/packages/server/src/services/mysql.ts b/packages/server/src/services/mysql.ts index bb838eb97..f25664e01 100644 --- a/packages/server/src/services/mysql.ts +++ b/packages/server/src/services/mysql.ts @@ -56,7 +56,11 @@ export const findMySqlById = async (mysqlId: string) => { const result = await db.query.mysql.findFirst({ where: eq(mysql.mysqlId, mysqlId), with: { - project: true, + environment: { + with: { + project: true, + }, + }, mounts: true, server: true, backups: { diff --git a/packages/server/src/services/postgres.ts b/packages/server/src/services/postgres.ts index 47ea3fafc..0d900443e 100644 --- a/packages/server/src/services/postgres.ts +++ b/packages/server/src/services/postgres.ts @@ -51,7 +51,11 @@ export const findPostgresById = async (postgresId: string) => { const result = await db.query.postgres.findFirst({ where: eq(postgres.postgresId, postgresId), with: { - project: true, + environment: { + with: { + project: true, + }, + }, mounts: true, server: true, backups: {