68 lines
1.8 KiB
TypeScript
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();
|
|
}),
|
|
});
|