import * as api from "@/lib/api" import { initiateSaveCardSchema } from "@/server/routers/user/output" import { protectedProcedure, router } from "@/server/trpc" import { addCreditCardInput, deleteCreditCardInput, saveCreditCardInput, } from "./input" export const userMutationRouter = router({ creditCard: router({ add: protectedProcedure.input(addCreditCardInput).mutation(async function ({ ctx, input, }) { const apiResponse = await api.post(api.endpoints.v1.intiateSaveCard, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, body: { language: input.language, mobileToken: false, redirectUrl: `api/web/add-card-callback/${input.language}`, }, }) if (!apiResponse.ok) { console.info(`API Response Failed - Initiating add Creadit Card flow`) console.error(apiResponse) return null } const apiJson = await apiResponse.json() const verifiedData = initiateSaveCardSchema.safeParse(apiJson) if (!verifiedData.success) { console.error(`Failed to initiate save card data`) console.error(verifiedData.error) return null } return verifiedData.data.data }), save: protectedProcedure .input(saveCreditCardInput) .mutation(async function ({ ctx, input }) { const apiResponse = await api.post( `${api.endpoints.v1.creditCards}/${input.transactionId}`, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, } ) if (!apiResponse.ok) { console.error(`API Response Failed - Save card`) console.error(apiResponse) return false } return true }), delete: protectedProcedure .input(deleteCreditCardInput) .mutation(async function ({ ctx, input }) { const apiResponse = await api.remove( `${api.endpoints.v1.creditCards}/${input.creditCardId}`, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, } ) if (!apiResponse.ok) { console.error(`API Response Failed - Delete credit card`) console.error(apiResponse) return false } return true }), }), })