mirror of
https://github.com/lukevella/rallly.git
synced 2025-04-29 02:06:34 +02:00
70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
import { prisma } from "@rallly/database";
|
|
import { z } from "zod";
|
|
|
|
import { getSubscriptionStatus } from "../../utils/auth";
|
|
import { possiblyPublicProcedure, privateProcedure, router } from "../trpc";
|
|
|
|
export const user = router({
|
|
getBilling: possiblyPublicProcedure.query(async ({ ctx }) => {
|
|
return await prisma.userPaymentData.findUnique({
|
|
select: {
|
|
subscriptionId: true,
|
|
status: true,
|
|
planId: true,
|
|
endDate: true,
|
|
updateUrl: true,
|
|
cancelUrl: true,
|
|
},
|
|
where: {
|
|
userId: ctx.user.id,
|
|
},
|
|
});
|
|
}),
|
|
subscription: possiblyPublicProcedure.query(
|
|
async ({ ctx }): Promise<{ legacy?: boolean; active: boolean }> => {
|
|
if (ctx.user.isGuest) {
|
|
// guest user can't have an active subscription
|
|
return {
|
|
active: false,
|
|
};
|
|
}
|
|
|
|
return await getSubscriptionStatus(ctx.user.id);
|
|
},
|
|
),
|
|
changeName: privateProcedure
|
|
.input(
|
|
z.object({
|
|
name: z.string().min(1).max(100),
|
|
}),
|
|
)
|
|
.mutation(async ({ input, ctx }) => {
|
|
await prisma.user.update({
|
|
where: {
|
|
id: ctx.user.id,
|
|
},
|
|
data: {
|
|
name: input.name,
|
|
},
|
|
});
|
|
}),
|
|
updatePreferences: privateProcedure
|
|
.input(
|
|
z.object({
|
|
locale: z.string().optional(),
|
|
timeZone: z.string().optional(),
|
|
weekStart: z.number().min(0).max(6).optional(),
|
|
timeFormat: z.enum(["hours12", "hours24"]).optional(),
|
|
}),
|
|
)
|
|
.mutation(async ({ input, ctx }) => {
|
|
if (ctx.user.isGuest === false) {
|
|
await prisma.user.update({
|
|
where: {
|
|
id: ctx.user.id,
|
|
},
|
|
data: input,
|
|
});
|
|
}
|
|
}),
|
|
});
|