79 lines
2 KiB
TypeScript
79 lines
2 KiB
TypeScript
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));
|
|
}),
|
|
});
|