import { db } from "@dokploy/server/db";import { type apiCreateSecurity, security } from "@dokploy/server/db/schema";import { createSecurityMiddleware, removeSecurityMiddleware,} from "@dokploy/server/utils/traefik/security";import { TRPCError } from "@trpc/server";import { eq } from "drizzle-orm";import type { z } from "zod";import { findApplicationById } from "./application";export type Security = typeof security.$inferSelect; export const findSecurityById = async (securityId: string) => { const application = await db.query.security.findFirst({ where: eq(security.securityId, securityId), }); if (!application) { throw new TRPCError({ code: "NOT_FOUND", message: "Security not found", }); } return application;}; export const createSecurity = async ( data: z.infer<typeof apiCreateSecurity>,) => { try { await db.transaction(async (tx) => { const application = await findApplicationById(data.applicationId); const securityResponse = await tx .insert(security) .values({ ...data, }) .returning() .then((res) => res[0]); if (!securityResponse) { throw new TRPCError({ code: "BAD_REQUEST", message: "Error creating the security", }); } await createSecurityMiddleware(application, securityResponse); return true; }); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", message: error instanceof Error ? error.message : "Error creating this security", cause: error, }); }}; export const deleteSecurityById = async (securityId: string) => { try { const result = await db .delete(security) .where(eq(security.securityId, securityId)) .returning() .then((res) => res[0]); if (!result) { throw new TRPCError({ code: "NOT_FOUND", message: "Security not found", }); } const application = await findApplicationById(result.applicationId); await removeSecurityMiddleware(application, result); return result; } catch (error) { const message = error instanceof Error ? error.message : "Error removing this security"; throw new TRPCError({ code: "BAD_REQUEST", message, }); }}; export const updateSecurityById = async ( securityId: string, data: Partial<Security>,) => { try { await db.transaction(async (tx) => { const securityResponse = await findSecurityById(securityId); const application = await findApplicationById( securityResponse.applicationId, ); await removeSecurityMiddleware(application, securityResponse); const response = await tx .update(security) .set({ ...data, }) .where(eq(security.securityId, securityId)) .returning() .then((res) => res[0]); if (!response) { throw new TRPCError({ code: "NOT_FOUND", message: "Security not found", }); } await createSecurityMiddleware(application, response); return response; }); } catch (error) { const message = error instanceof Error ? error.message : "Error updating this security"; throw new TRPCError({ code: "BAD_REQUEST", message, }); }};
import { db } from "@dokploy/server/db";
import { type apiCreateSecurity, security } from "@dokploy/server/db/schema";
import {
createSecurityMiddleware,
removeSecurityMiddleware,
} from "@dokploy/server/utils/traefik/security";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import type { z } from "zod";
import { findApplicationById } from "./application";
export type Security = typeof security.$inferSelect;
export const findSecurityById = async (securityId: string) => {
const application = await db.query.security.findFirst({
where: eq(security.securityId, securityId),
});
if (!application) {
throw new TRPCError({
code: "NOT_FOUND",
message: "Security not found",
});
}
return application;
};
export const createSecurity = async (
data: z.infer<typeof apiCreateSecurity>,
) => {
try {
await db.transaction(async (tx) => {
const application = await findApplicationById(data.applicationId);
const securityResponse = await tx
.insert(security)
.values({
...data,
})
.returning()
.then((res) => res[0]);
if (!securityResponse) {
throw new TRPCError({
code: "BAD_REQUEST",
message: "Error creating the security",
});
}
await createSecurityMiddleware(application, securityResponse);
return true;
});
} catch (error) {
throw new TRPCError({
code: "BAD_REQUEST",
message:
error instanceof Error ? error.message : "Error creating this security",
cause: error,
});
}
};
export const deleteSecurityById = async (securityId: string) => {
try {
const result = await db
.delete(security)
.where(eq(security.securityId, securityId))
.returning()
.then((res) => res[0]);
if (!result) {
throw new TRPCError({
code: "NOT_FOUND",
message: "Security not found",
});
}
const application = await findApplicationById(result.applicationId);
await removeSecurityMiddleware(application, result);
return result;
} catch (error) {
const message =
error instanceof Error ? error.message : "Error removing this security";
throw new TRPCError({
code: "BAD_REQUEST",
message,
});
}
};
export const updateSecurityById = async (
securityId: string,
data: Partial<Security>,
) => {
try {
await db.transaction(async (tx) => {
const securityResponse = await findSecurityById(securityId);
const application = await findApplicationById(
securityResponse.applicationId,
);
await removeSecurityMiddleware(application, securityResponse);
const response = await tx
.update(security)
.set({
...data,
})
.where(eq(security.securityId, securityId))
.returning()
.then((res) => res[0]);
if (!response) {
throw new TRPCError({
code: "NOT_FOUND",
message: "Security not found",
});
}
await createSecurityMiddleware(application, response);
return response;
});
} catch (error) {
const message =
error instanceof Error ? error.message : "Error updating this security";
throw new TRPCError({
code: "BAD_REQUEST",
message,
});
}
};