wicked-eggs-push/apps/server/routers/notes.ts
2026-05-13 12:18:03 +05:00

68 lines
1.8 KiB
TypeScript

import { z } from "zod";
import { router, publicProcedure } from "../trpc";
export const notesRouter = router({
getByActivity: publicProcedure
.input(z.object({ activityId: z.number() }))
.query(async ({ ctx, input }) => {
return await ctx.queryBuilder
.selectFrom("notes")
.select(["id", "name", "createdAt", "updatedAt"])
.where("activities1", "=", input.activityId)
.orderBy("createdAt", "desc")
.execute();
}),
getById: publicProcedure
.input(z.object({ id: z.number() }))
.query(async ({ ctx, input }) => {
return await ctx.queryBuilder
.selectFrom("notes")
.select(["id", "name", "createdAt", "updatedAt"])
.where("id", "=", input.id)
.executeTakeFirst();
}),
create: publicProcedure
.input(
z.object({
name: z.string().min(1),
activities1: z.array(z.number()),
})
)
.mutation(async ({ ctx, input }) => {
return await ctx.queryBuilder
.insertInto("notes")
.values(input)
.executeTakeFirst();
}),
update: publicProcedure
.input(
z.object({
id: z.number(),
name: z.string().optional(),
})
)
.mutation(async ({ ctx, input }) => {
const { id, ...data } = input;
const updateData = Object.fromEntries(
Object.entries(data).filter(([, v]) => v !== undefined)
) as typeof data;
return await ctx.queryBuilder
.update("notes")
.set(updateData)
.where("id", "=", id)
.execute();
}),
delete: publicProcedure
.input(z.object({ id: z.number() }))
.mutation(async ({ ctx, input }) => {
return await ctx.queryBuilder
.deleteFrom("notes")
.where("id", "=", input.id)
.execute();
}),
});