Merge pull request #163 from Dokploy/40-feature-request-automatically-generates-domains

40 feature request automatically generates domains
This commit is contained in:
Mauricio Siu
2024-06-24 01:15:59 -06:00
committed by GitHub
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: 3000,
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),