79 lines
3.2 KiB
JavaScript
79 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; |