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, }) { console.info( "api.user.creditCard.add start", JSON.stringify({ query: { language: input.language } }) ) 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) { const text = await apiResponse.text() console.error( "api.user.creditCard.add error", JSON.stringify({ query: { language: input.language }, error: { status: apiResponse.status, statusText: apiResponse.statusText, error: text, }, }) ) return null } const apiJson = await apiResponse.json() const verifiedData = initiateSaveCardSchema.safeParse(apiJson) if (!verifiedData.success) { console.error( "api.user.creditCard.add validation error", JSON.stringify({ query: { language: input.language }, error: verifiedData.error, }) ) return null } console.info( "api.user.creditCard.add success", JSON.stringify({ query: { language: input.language } }) ) return verifiedData.data.data }), save: protectedProcedure .input(saveCreditCardInput) .mutation(async function ({ ctx, input }) { console.info("api.user.creditCard.save start", JSON.stringify({})) const apiResponse = await api.post( `${api.endpoints.v1.creditCards}/${input.transactionId}`, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, } ) if (!apiResponse.ok) { const text = await apiResponse.text() console.error( "api.user.creditCard.save error", JSON.stringify({ error: { status: apiResponse.status, statusText: apiResponse.statusText, text, }, }) ) return false } console.info("api.user.creditCard.save success", JSON.stringify({})) return true }), delete: protectedProcedure .input(deleteCreditCardInput) .mutation(async function ({ ctx, input }) { console.info( "api.user.creditCard.delete start", JSON.stringify({ query: {} }) ) const apiResponse = await api.remove( `${api.endpoints.v1.creditCards}/${input.creditCardId}`, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, } ) if (!apiResponse.ok) { const text = await apiResponse.text() console.error( "api.user.creditCard.delete error", JSON.stringify({ error: { status: apiResponse.status, statusText: apiResponse.statusText, text, }, query: {}, }) ) return false } console.info("api.user.creditCard.delete success", JSON.stringify({})) return true }), }), })