mirror of
https://github.com/ArthurDanjou/website.git
synced 2026-01-14 12:14:42 +01:00
69 lines
1.4 KiB
TypeScript
69 lines
1.4 KiB
TypeScript
import { z } from 'zod'
|
|
import { publicProcedure, router } from '../trpc'
|
|
|
|
const PostSchema = z.object({
|
|
slug: z.string(),
|
|
})
|
|
|
|
export default router({
|
|
createOrUpdate: publicProcedure
|
|
.input(PostSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
return await ctx.prisma.post.upsert({
|
|
where: {
|
|
slug: input.slug,
|
|
},
|
|
update: {},
|
|
create: {
|
|
slug: input.slug,
|
|
},
|
|
})
|
|
}),
|
|
getTotalViews: publicProcedure
|
|
.query(async ({ ctx }) => {
|
|
const views = await ctx.prisma.post.aggregate({
|
|
_sum: {
|
|
views: true,
|
|
},
|
|
})
|
|
return views._sum.views || 0
|
|
}),
|
|
view: publicProcedure
|
|
.input(PostSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
return await ctx.prisma.post.update({
|
|
where: {
|
|
slug: input.slug,
|
|
},
|
|
data: {
|
|
views: {
|
|
increment: 1,
|
|
},
|
|
},
|
|
})
|
|
}),
|
|
getTotalLikes: publicProcedure
|
|
.query(async ({ ctx }) => {
|
|
const likes = await ctx.prisma.post.aggregate({
|
|
_sum: {
|
|
likes: true,
|
|
},
|
|
})
|
|
return likes._sum.likes || 0
|
|
}),
|
|
like: publicProcedure
|
|
.input(PostSchema)
|
|
.mutation(async ({ ctx, input }) => {
|
|
return await ctx.prisma.post.update({
|
|
where: {
|
|
slug: input.slug,
|
|
},
|
|
data: {
|
|
likes: {
|
|
increment: 1,
|
|
},
|
|
},
|
|
})
|
|
}),
|
|
})
|