import { db } from "@dokploy/server/db"; import { invitation, member, organization, user, } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; import { IS_CLOUD } from "../constants"; import { getWebServerSettings } from "./web-server-settings"; export const findUserById = async (userId: string) => { const userResult = await db.query.user.findFirst({ where: eq(user.id, userId), // with: { // account: true, // }, }); if (!userResult) { throw new TRPCError({ code: "NOT_FOUND", message: "User not found", }); } return userResult; }; export const findOrganizationById = async (organizationId: string) => { const organizationResult = await db.query.organization.findFirst({ where: eq(organization.id, organizationId), with: { owner: true, }, }); return organizationResult; }; export const isAdminPresent = async () => { const admin = await db.query.member.findFirst({ where: eq(member.role, "owner"), }); if (!admin) { return false; } return true; }; export const findOwner = async () => { const admin = await db.query.member.findFirst({ where: eq(member.role, "owner"), with: { user: true, }, }); if (!admin) { throw new TRPCError({ code: "NOT_FOUND", message: "Admin not found", }); } return admin; }; export const getUserByToken = async (token: string) => { const userResult = await db.query.invitation.findFirst({ where: eq(invitation.id, token), columns: { id: true, email: true, status: true, expiresAt: true, role: true, inviterId: true, }, }); if (!userResult) { throw new TRPCError({ code: "NOT_FOUND", message: "Invitation not found", }); } const userAlreadyExists = await db.query.user.findFirst({ where: eq(user.email, userResult?.email || ""), }); const { expiresAt, ...rest } = userResult; return { ...rest, isExpired: userResult.expiresAt < new Date(), userAlreadyExists: !!userAlreadyExists, }; }; export const removeUserById = async (userId: string) => { await db .delete(user) .where(eq(user.id, userId)) .returning() .then((res) => res[0]); }; export const getDokployUrl = async () => { if (IS_CLOUD) { return "https://app.dokploy.com"; } const settings = await getWebServerSettings(); if (settings?.host) { const protocol = settings?.https ? "https" : "http"; return `${protocol}://${settings?.host}`; } return `http://${settings?.serverIp}:${process.env.PORT}`; }; export const getTrustedOrigins = async () => { const members = await db.query.member.findMany({ where: eq(member.role, "owner"), with: { user: true, }, }); if (members.length === 0) { return []; } const trustedOrigins = members.flatMap( (member) => member.user.trustedOrigins || [], ); return Array.from(new Set(trustedOrigins)); };