import { db } from "@dokploy/server/db"; import { gitProvider, member } from "@dokploy/server/db/schema"; import { hasValidLicense } from "@dokploy/server/services/proprietary/license-key"; import { TRPCError } from "@trpc/server"; import { and, eq } from "drizzle-orm"; export type GitProvider = typeof gitProvider.$inferSelect; export const removeGitProvider = async (gitProviderId: string) => { const result = await db .delete(gitProvider) .where(eq(gitProvider.gitProviderId, gitProviderId)) .returning(); return result[0]; }; export const findGitProviderById = async (gitProviderId: string) => { const result = await db.query.gitProvider.findFirst({ where: eq(gitProvider.gitProviderId, gitProviderId), }); if (!result) { throw new TRPCError({ code: "NOT_FOUND", message: "Git Provider not found", }); } return result; }; export const updateGitProvider = async ( gitProviderId: string, input: Partial, ) => { return await db .update(gitProvider) .set({ ...input, }) .where(eq(gitProvider.gitProviderId, gitProviderId)) .returning() .then((response) => response[0]); }; export const getAccessibleGitProviderIds = async (session: { userId: string; activeOrganizationId: string; }): Promise> => { const { userId, activeOrganizationId } = session; const allOrgProviders = await db.query.gitProvider.findMany({ where: eq(gitProvider.organizationId, activeOrganizationId), columns: { gitProviderId: true, userId: true, sharedWithOrganization: true, }, }); const memberRecord = await db.query.member.findFirst({ where: and( eq(member.userId, userId), eq(member.organizationId, activeOrganizationId), ), columns: { accessedGitProviders: true, role: true }, }); if (memberRecord?.role === "owner" || memberRecord?.role === "admin") { return new Set(allOrgProviders.map((p) => p.gitProviderId)); } const licensed = await hasValidLicense(activeOrganizationId); const assignedSet = licensed ? new Set(memberRecord?.accessedGitProviders ?? []) : new Set(); const result = new Set(); for (const p of allOrgProviders) { if ( p.userId === userId || p.sharedWithOrganization || assignedSet.has(p.gitProviderId) ) { result.add(p.gitProviderId); } } return result; };