| import { updateUserSchema } from "@api/schemas/users"; |
| import { resend } from "@api/services/resend"; |
| import { createTRPCRouter, protectedProcedure } from "@api/trpc/init"; |
| import { withRetryOnPrimary } from "@api/utils/db-retry"; |
| import { |
| deleteUser, |
| getUserById, |
| getUserInvites, |
| updateUser, |
| } from "@midday/db/queries"; |
| import { generateFileKey } from "@midday/encryption"; |
|
|
| export const userRouter = createTRPCRouter({ |
| me: protectedProcedure.query(async ({ ctx: { db, session } }) => { |
| |
| |
| const result = await withRetryOnPrimary(db, async (dbInstance) => |
| getUserById(dbInstance, session.user.id), |
| ); |
|
|
| if (!result) { |
| return undefined; |
| } |
|
|
| return { |
| ...result, |
| fileKey: result.teamId ? await generateFileKey(result.teamId) : null, |
| }; |
| }), |
|
|
| update: protectedProcedure |
| .input(updateUserSchema) |
| .mutation(async ({ ctx: { db, session }, input }) => { |
| return updateUser(db, { |
| id: session.user.id, |
| ...input, |
| }); |
| }), |
|
|
| delete: protectedProcedure.mutation( |
| async ({ ctx: { supabase, db, session } }) => { |
| const [data] = await Promise.all([ |
| deleteUser(db, session.user.id), |
| supabase.auth.admin.deleteUser(session.user.id), |
| resend.contacts.remove({ |
| email: session.user.email!, |
| audienceId: process.env.RESEND_AUDIENCE_ID!, |
| }), |
| ]); |
|
|
| return data; |
| }, |
| ), |
|
|
| invites: protectedProcedure.query(async ({ ctx: { db, session } }) => { |
| if (!session.user.email) { |
| return []; |
| } |
|
|
| return getUserInvites(db, session.user.email); |
| }), |
| }); |
|
|