Live messaging powered by tRPC subscriptions and Redis (or standard polling).
// Real tRPC implementation
export const chatRouter = {
list: publicProcedure.query(async () => {
return prisma.message.findMany({
orderBy: { createdAt: "asc" },
include: { sender: true },
});
}),
send: protectedProcedure
.input(z.object({ content: z.string() }))
.mutation(async ({ ctx, input }) => {
return prisma.message.create({
data: {
content: input.content,
senderId: ctx.session.user.id,
},
});
}),
}