api: add protected CRUD routers and DNS check logic
This commit is contained in:
parent
c7edd90a7e
commit
5264cccb6c
11 changed files with 709 additions and 8 deletions
82
packages/api/src/routers/services.ts
Normal file
82
packages/api/src/routers/services.ts
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
import { db } from "@minmon/db";
|
||||
import { domain, service } from "@minmon/db";
|
||||
import { count, desc, eq } from "drizzle-orm";
|
||||
|
||||
import { protectedProcedure, router } from "../index";
|
||||
import {
|
||||
byIdSchema,
|
||||
serviceCreateSchema,
|
||||
serviceListSchema,
|
||||
serviceUpdateSchema,
|
||||
} from "./schemas";
|
||||
import {
|
||||
createEntityId,
|
||||
requireServer,
|
||||
requireService,
|
||||
stripUndefined,
|
||||
} from "./utils";
|
||||
|
||||
export const servicesRouter = router({
|
||||
list: protectedProcedure.input(serviceListSchema).query(async ({ input }) => {
|
||||
if (!input?.serverId) {
|
||||
return db.select().from(service).orderBy(desc(service.updatedAt));
|
||||
}
|
||||
|
||||
await requireServer(input.serverId);
|
||||
|
||||
return db
|
||||
.select()
|
||||
.from(service)
|
||||
.where(eq(service.serverId, input.serverId))
|
||||
.orderBy(desc(service.updatedAt));
|
||||
}),
|
||||
|
||||
byId: protectedProcedure.input(byIdSchema).query(async ({ input }) => {
|
||||
const item = await requireService(input.id);
|
||||
const [domainCount] = await db.select({ count: count() }).from(domain).where(eq(domain.serviceId, input.id));
|
||||
|
||||
return {
|
||||
...item,
|
||||
summary: {
|
||||
domains: domainCount?.count ?? 0,
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
create: protectedProcedure.input(serviceCreateSchema).mutation(async ({ input }) => {
|
||||
await requireServer(input.serverId);
|
||||
|
||||
const [created] = await db
|
||||
.insert(service)
|
||||
.values({
|
||||
id: createEntityId(),
|
||||
...input,
|
||||
})
|
||||
.returning();
|
||||
|
||||
return created;
|
||||
}),
|
||||
|
||||
update: protectedProcedure.input(serviceUpdateSchema).mutation(async ({ input }) => {
|
||||
const { id, serverId, ...changes } = input;
|
||||
await requireService(id);
|
||||
|
||||
if (serverId) {
|
||||
await requireServer(serverId);
|
||||
}
|
||||
|
||||
const [updated] = await db
|
||||
.update(service)
|
||||
.set(stripUndefined({ serverId, ...changes }))
|
||||
.where(eq(service.id, id))
|
||||
.returning();
|
||||
|
||||
return updated;
|
||||
}),
|
||||
|
||||
delete: protectedProcedure.input(byIdSchema).mutation(async ({ input }) => {
|
||||
await requireService(input.id);
|
||||
await db.delete(service).where(eq(service.id, input.id));
|
||||
return { id: input.id };
|
||||
}),
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue