import { Resend } from 'resend' import Payment from '../models/payment.js' import { paymentConfirmationEmail } from '../emails/paymentConfirmation.js' const resend = new Resend(process.env.RESEND_API_KEY) function mapStatus(helcimStatus) { if (helcimStatus === 'paid') return 'success' if (helcimStatus === 'refunded') return 'refunded' if (helcimStatus === 'failed') return 'failed' return null } export async function upsertPaymentFromHelcim(memberDoc, helcimTx, opts = {}) { const status = mapStatus(helcimTx?.status) if (!status) return { created: false, payment: null } const existing = await Payment.findOne({ helcimTransactionId: helcimTx.id }) if (existing) return { created: false, payment: existing } const paymentType = opts.paymentType || memberDoc.billingCadence const fields = { memberId: memberDoc._id, helcimTransactionId: helcimTx.id, helcimCustomerId: memberDoc.helcimCustomerId || null, helcimSubscriptionId: memberDoc.helcimSubscriptionId || null, amount: helcimTx.amount, currency: helcimTx.currency || 'CAD', paymentDate: helcimTx.date ? new Date(helcimTx.date) : new Date(), paymentType, status, rawHelcim: helcimTx } let payment try { payment = await Payment.create(fields) } catch (err) { if (err?.code === 11000) { const racer = await Payment.findOne({ helcimTransactionId: helcimTx.id }) return { created: false, payment: racer } } throw err } if (opts.sendConfirmation) { try { await resend.emails.send( paymentConfirmationEmail({ member: memberDoc, amount: fields.amount, paymentDate: fields.paymentDate, transactionId: fields.helcimTransactionId }) ) } catch (err) { console.error('[payments] failed to send payment confirmation email:', err?.message || err) } } return { created: true, payment } }