va-tracker-middleware/src/services/salesforce.service.js

80 lines
3.2 KiB
JavaScript

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;