import axios from "axios"; import logger from "../config/logger.js"; import authFetch from "../utils/authFetch.js"; class SalesforceService { async registerClientInSalesforce(clientData, _id) { try { const url = `${process.env.SF_DOCTRACKER_API_URL}/services/apexrest/docva/api/client`; // Extract only the required data for Salesforce const salesforcePayload = this.prepareSalesforcePayload(clientData, _id); logger.info(`SalesforceService - Sending client data to Salesforce: ${clientData.userDetails.email}`); const response = await authFetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(salesforcePayload), timeout: 30000, // 30 seconds timeout }); logger.info(`SalesforceService - Client registered successfully in Salesforce: ${clientData.userDetails.email}`); return response.data; } catch (error) { logger.error(`SalesforceService - Error registering client in Salesforce: ${error.message}`); if (error.response) { // Salesforce returned an error response logger.error(`SalesforceService - Salesforce API error: ${error.response.status} - ${JSON.stringify(error.response.data)}`); throw new Error(`Salesforce API error: ${error.response.status} - ${error.response.data.message || 'Unknown error'}`); } else if (error.request) { // Request was made but no response received logger.error('SalesforceService - No response received from Salesforce API'); throw new Error('Salesforce API is unreachable'); } else { // Something else happened throw error; } } } prepareSalesforcePayload(clientData, _id) { const { userDetails } = clientData; return { userDetails: { _id: _id, firstName: userDetails.firstName, lastName: userDetails.lastName, email: userDetails.email.toLowerCase(), address: userDetails.address || null, city: userDetails.city || null, state: userDetails.state || null, zip: userDetails.zip || null, billingName: userDetails.billingName || null, billingAddress: userDetails.billingAddress || null, billingCity: userDetails.billingCity || null, billingState: userDetails.billingState || null, billingZip: userDetails.billingZip || null, billingEmail: userDetails.billingEmail || null, position: userDetails.position || null, signatoryName: userDetails.signatoryName || null, signatoryEmail: userDetails.signatoryEmail || null, paymentMethod: userDetails.paymentMethod || null, bankName: userDetails.bankName || null, accountNumber: userDetails.accountNumber || null, routingNumber: userDetails.routingNumber || null, accountType: userDetails.accountType || null, accountHolderName: userDetails.accountHolderName || null, cardNumber: userDetails.cardNumber || null, expiryDate: userDetails.expiryDate || null, securityCode: userDetails.securityCode || null, cardZip: userDetails.cardZip || null, } }; } } export default SalesforceService;