import bcrypt from "bcrypt"; import { VAModel } from "../../../models/vaModel.js"; // Register a new VA async function va_register(req, res) { try { const payload = req.body|| {}; const { userDetails } = payload; if (!userDetails || !userDetails.email || !userDetails.firstName || !userDetails.password) { return res.status(400).json({ success: false, message: "Missing required fields" }); } // ✅ Check if user already exists by email const existingUser = await VAModel.findOne({ "userDetails.email": userDetails.email.toLowerCase() }); if (existingUser) { return res.status(409).json({ success: false, message: "User already exists with this email" }); } const saltRounds = 10; const hashedPassword = await bcrypt.hash(userDetails.password, saltRounds); // sanitize/construct allowed fields const toCreate = { userDetails: { firstName: userDetails.firstName, lastName: userDetails.lastName || "", email: userDetails.email, dob: userDetails.dob || null, age: userDetails.age || null, address: userDetails.address || null, city: userDetails.city || null, state: userDetails.state || null, country: userDetails.country || null, password: hashedPassword, paymentMethod: userDetails.paymentMethod || null, payoneerAccount: userDetails.payoneerAccount || null, veemAccount: userDetails.veemAccount || null, phone: userDetails.phone || null, skype: userDetails.skype || null, }, tracking: payload.tracking || undefined, clientIds: payload.clientIds || [], schedule: payload.schedule || undefined, status: payload.status || "FULLTIME", }; const created = await VAModel.create(toCreate); // Send data to Salesforce API after successful registration try { const salesforceUrl = `${process.env.SF_DOCTRACKER_API_URL}services/apexrest/docva/api/virtualassistant`; const response = await fetch(salesforceUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', // Add any required headers for Salesforce authentication // 'Authorization': 'Bearer ' + process.env.SF_ACCESS_TOKEN }, body: JSON.stringify(created) }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Salesforce API responded with status ${response.status}: ${errorText}`); } const result = await response.json(); console.log("✅ Successfully synced VA data to Salesforce:", result); res.status(201).json({ success: true, data: created, SyncSalesforce: result }); } catch (error) { console.error("❌ Failed to sync with Salesforce:", error.message); // Create a custom error to distinguish Salesforce errors const salesforceError = new Error(`Salesforce sync failed: ${error.message}`); salesforceError.isSalesforceError = true; throw salesforceError; } } catch (error) { console.error("va_register error:", error); return res.status(500).json({ success: false, message: "Internal Server Error" }); } } export { va_register };