From 8a1e36cc3b813a0066b8c73d4411ec80ed149ed6 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Thu, 28 Aug 2025 18:26:05 -0600 Subject: [PATCH] feat(settings): add user subscription check to dashboard layout --- .../components/layouts/dashboard-layout.tsx | 11 ++++++++++- apps/dokploy/server/api/routers/settings.ts | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/components/layouts/dashboard-layout.tsx b/apps/dokploy/components/layouts/dashboard-layout.tsx index b4832b4b3..b65e7dbb8 100644 --- a/apps/dokploy/components/layouts/dashboard-layout.tsx +++ b/apps/dokploy/components/layouts/dashboard-layout.tsx @@ -11,11 +11,20 @@ interface Props { export const DashboardLayout = ({ children }: Props) => { const { data: haveRootAccess } = api.user.haveRootAccess.useQuery(); const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: isUserSubscribed } = api.settings.isUserSubscribed.useQuery( + undefined, + { + enabled: isCloud === true, + refetchOnWindowFocus: false, + refetchOnMount: false, + refetchOnReconnect: false, + }, + ); return ( <> {children} - {isCloud === true && ( + {isCloud === true && isUserSubscribed === true && ( )} diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index 7ae0b6e85..e6a15af24 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -45,7 +45,7 @@ import { } from "@dokploy/server"; import { generateOpenApiDocument } from "@dokploy/trpc-openapi"; import { TRPCError } from "@trpc/server"; -import { sql } from "drizzle-orm"; +import { eq, sql } from "drizzle-orm"; import { dump, load } from "js-yaml"; import { scheduledJobs, scheduleJob } from "node-schedule"; import { z } from "zod"; @@ -60,6 +60,8 @@ import { apiServerSchema, apiTraefikConfig, apiUpdateDockerCleanup, + projects, + server, } from "@/server/db/schema"; import { removeJob, schedule } from "@/server/utils/backup"; import packageInfo from "../../../package.json"; @@ -706,6 +708,18 @@ export const settingsRouter = createTRPCRouter({ isCloud: publicProcedure.query(async () => { return IS_CLOUD; }), + isUserSubscribed: publicProcedure.query(async ({ ctx }) => { + const haveServers = await db.query.server.findMany({ + where: eq(server.organizationId, ctx.session?.activeOrganizationId || ""), + }); + const haveProjects = await db.query.projects.findMany({ + where: eq( + projects.organizationId, + ctx.session?.activeOrganizationId || "", + ), + }); + return haveServers.length > 0 || haveProjects.length > 0; + }), health: publicProcedure.query(async () => { if (IS_CLOUD) { try {