cal.pub0.org/server/routers/viewer.tsx

82 lines
1.7 KiB
TypeScript
Raw Normal View History

import { TRPCError } from "@trpc/server";
import { createRouter } from "../createRouter";
// routes only available to authenticated users
export const viewerRouter = createRouter()
// check that user is authenticated
.middleware(({ ctx, next }) => {
const { user } = ctx;
if (!user) {
throw new TRPCError({ code: "UNAUTHORIZED" });
}
return next({
ctx: {
...ctx,
// session value is known to be non-null now
user,
},
});
})
.query("me", {
resolve({ ctx }) {
return ctx.user;
},
})
.query("bookings", {
async resolve({ ctx }) {
const { prisma, user } = ctx;
const bookingsQuery = await prisma.booking.findMany({
where: {
OR: [
{
userId: user.id,
},
{
attendees: {
some: {
email: user.email,
},
},
},
],
},
select: {
uid: true,
title: true,
description: true,
attendees: true,
confirmed: true,
rejected: true,
id: true,
startTime: true,
endTime: true,
eventType: {
select: {
team: {
select: {
name: true,
},
},
},
},
status: true,
},
orderBy: {
startTime: "asc",
},
});
const bookings = bookingsQuery.reverse().map((booking) => {
return {
...booking,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
};
});
return bookings;
},
});