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
79
packages/api/src/routers/notes.ts
Normal file
79
packages/api/src/routers/notes.ts
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
import { db } from "@minmon/db";
|
||||
import { note, server } from "@minmon/db";
|
||||
import { desc, eq } from "drizzle-orm";
|
||||
|
||||
import { protectedProcedure, router } from "../index";
|
||||
import { byIdSchema, noteCreateSchema, noteListSchema, noteUpdateSchema } from "./schemas";
|
||||
import {
|
||||
createEntityId,
|
||||
requireNote,
|
||||
requireServer,
|
||||
stripUndefined,
|
||||
} from "./utils";
|
||||
|
||||
export const notesRouter = router({
|
||||
list: protectedProcedure.input(noteListSchema).query(async ({ input }) => {
|
||||
if (!input?.serverId) {
|
||||
return db.select().from(note).orderBy(desc(note.updatedAt));
|
||||
}
|
||||
|
||||
await requireServer(input.serverId);
|
||||
|
||||
return db
|
||||
.select()
|
||||
.from(note)
|
||||
.where(eq(note.serverId, input.serverId))
|
||||
.orderBy(desc(note.updatedAt));
|
||||
}),
|
||||
|
||||
byId: protectedProcedure.input(byIdSchema).query(async ({ input }) => {
|
||||
return requireNote(input.id);
|
||||
}),
|
||||
|
||||
create: protectedProcedure.input(noteCreateSchema).mutation(async ({ input }) => {
|
||||
await requireServer(input.serverId);
|
||||
|
||||
const [created] = await db
|
||||
.insert(note)
|
||||
.values({
|
||||
id: createEntityId(),
|
||||
...input,
|
||||
})
|
||||
.returning();
|
||||
|
||||
return created;
|
||||
}),
|
||||
|
||||
update: protectedProcedure.input(noteUpdateSchema).mutation(async ({ input }) => {
|
||||
const { id, serverId, ...changes } = input;
|
||||
await requireNote(id);
|
||||
|
||||
if (serverId) {
|
||||
await requireServer(serverId);
|
||||
}
|
||||
|
||||
const [updated] = await db
|
||||
.update(note)
|
||||
.set(stripUndefined({ serverId, ...changes }))
|
||||
.where(eq(note.id, id))
|
||||
.returning();
|
||||
|
||||
return updated;
|
||||
}),
|
||||
|
||||
delete: protectedProcedure.input(byIdSchema).mutation(async ({ input }) => {
|
||||
await requireNote(input.id);
|
||||
await db.delete(note).where(eq(note.id, input.id));
|
||||
return { id: input.id };
|
||||
}),
|
||||
|
||||
serverOptions: protectedProcedure.query(async () => {
|
||||
return db
|
||||
.select({
|
||||
id: server.id,
|
||||
name: server.name,
|
||||
})
|
||||
.from(server)
|
||||
.orderBy(desc(server.updatedAt));
|
||||
}),
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue