feat(#40): add domain generation by traefik.me

This commit is contained in:
Mauricio Siu
2024-06-24 00:47:40 -06:00
parent 687524d154
commit f230bda1f7
4 changed files with 122 additions and 11 deletions

View File

@@ -12,6 +12,7 @@ import {
createDomain,
findDomainById,
findDomainsByApplicationId,
generateDomain,
removeDomainById,
updateDomainById,
} from "../services/domain";
@@ -35,6 +36,11 @@ export const domainRouter = createTRPCRouter({
.query(async ({ input }) => {
return await findDomainsByApplicationId(input.applicationId);
}),
generateDomain: protectedProcedure
.input(apiFindDomainByApplication)
.mutation(async ({ input }) => {
return generateDomain(input);
}),
update: protectedProcedure
.input(apiUpdateDomain)
.mutation(async ({ input }) => {

View File

@@ -1,9 +1,15 @@
import { db } from "@/server/db";
import { type apiCreateDomain, domains } from "@/server/db/schema";
import {
type apiCreateDomain,
type apiFindDomainByApplication,
domains,
} from "@/server/db/schema";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { findApplicationById } from "./application";
import { manageDomain } from "@/server/utils/traefik/domain";
import { findAdmin } from "./admin";
import { generateRandomDomain } from "@/templates/utils";
export type Domain = typeof domains.$inferSelect;
@@ -29,6 +35,26 @@ export const createDomain = async (input: typeof apiCreateDomain._type) => {
await manageDomain(application, domain);
});
};
export const generateDomain = async (
input: typeof apiFindDomainByApplication._type,
) => {
const application = await findApplicationById(input.applicationId);
const admin = await findAdmin();
const domain = await createDomain({
applicationId: application.applicationId,
host: generateRandomDomain({
serverIp: admin.serverIp || "",
projectName: application.appName,
}),
port: process.env.NODE_ENV === "development" ? 3000 : 80,
certificateType: "none",
https: false,
path: "/",
});
return domain;
};
export const findDomainById = async (domainId: string) => {
const domain = await db.query.domains.findFirst({
where: eq(domains.domainId, domainId),