@@ -8,11 +8,12 @@ const {
88} = require ( '~/models/EnterpriseContact' ) ;
99
1010/**
11- * Creates a new enterprise contact
11+ * Creates a new enterprise contact or general feedback
1212 */
1313const createEnterpriseContactController = async ( req , res ) => {
1414 try {
1515 const {
16+ feedbackType = 'enterprise' ,
1617 firstName,
1718 lastName,
1819 workEmail,
@@ -25,30 +26,47 @@ const createEnterpriseContactController = async (req, res) => {
2526 complianceNeeds = [ ] ,
2627 timeline,
2728 additionalInfo,
29+ conversationId,
30+ userId : bodyUserId ,
2831 } = req . body ;
2932
30- // Validate required fields
31- if ( ! firstName || ! lastName || ! workEmail ) {
32- return res . status ( 400 ) . json ( {
33- error : 'Missing required fields: firstName, lastName, and workEmail are required' ,
34- } ) ;
33+ // Get user info from authenticated user if available, fallback to body
34+ const userId = req . user ?. _id ?. toString ( ) || req . user ?. id ?. toString ( ) || bodyUserId ;
35+
36+ // Validate required fields based on feedback type
37+ if ( feedbackType === 'enterprise' ) {
38+ if ( ! firstName || ! lastName || ! workEmail ) {
39+ return res . status ( 400 ) . json ( {
40+ error :
41+ 'Missing required fields: firstName, lastName, and workEmail are required for enterprise contacts' ,
42+ } ) ;
43+ }
44+ } else if ( feedbackType === 'general' ) {
45+ if ( ! additionalInfo || additionalInfo . trim ( ) . length === 0 ) {
46+ return res . status ( 400 ) . json ( {
47+ error : 'Feedback content is required' ,
48+ } ) ;
49+ }
3550 }
3651
37- // Check for existing contact with same email
38- const existingContact = await getEnterpriseContactById ( workEmail ) ;
39- if ( existingContact ) {
40- logger . info ( `Duplicate enterprise contact submission for email: ${ workEmail } ` ) ;
41- // Return success to avoid exposing existing contacts, but don't create duplicate
42- return res . status ( 200 ) . json ( {
43- message : 'Contact submission received successfully' ,
44- contactId : existingContact . contactId ,
45- } ) ;
52+ // Check for existing contact with same email (only for enterprise contacts)
53+ if ( feedbackType === 'enterprise' && workEmail ) {
54+ const existingContact = await getEnterpriseContactById ( workEmail ) ;
55+ if ( existingContact ) {
56+ logger . info ( `Duplicate enterprise contact submission for email: ${ workEmail } ` ) ;
57+ // Return success to avoid exposing existing contacts, but don't create duplicate
58+ return res . status ( 200 ) . json ( {
59+ message : 'Contact submission received successfully' ,
60+ contactId : existingContact . contactId ,
61+ } ) ;
62+ }
4663 }
4764
4865 const contactData = {
49- firstName : firstName . trim ( ) ,
50- lastName : lastName . trim ( ) ,
51- workEmail : workEmail . trim ( ) . toLowerCase ( ) ,
66+ feedbackType,
67+ firstName : firstName ?. trim ( ) ,
68+ lastName : lastName ?. trim ( ) ,
69+ workEmail : workEmail ?. trim ( ) . toLowerCase ( ) ,
5270 phoneNumber : phoneNumber ?. trim ( ) ,
5371 companyWebsite : companyWebsite ?. trim ( ) ,
5472 problemToSolve : problemToSolve ?. trim ( ) ,
@@ -58,14 +76,21 @@ const createEnterpriseContactController = async (req, res) => {
5876 complianceNeeds : Array . isArray ( complianceNeeds ) ? complianceNeeds : [ ] ,
5977 timeline,
6078 additionalInfo : additionalInfo ?. trim ( ) ,
79+ userId : userId ?. toString ( ) ,
80+ conversationId : conversationId ?. trim ( ) ,
6181 } ;
6282
6383 const contact = await createEnterpriseContact ( contactData ) ;
6484
65- logger . info ( `New enterprise contact created: ${ contact . contactId } - ${ workEmail } ` ) ;
85+ logger . info (
86+ `New ${ feedbackType } contact created: ${ contact . contactId } - ${ workEmail || userId } ` ,
87+ ) ;
6688
6789 res . status ( 201 ) . json ( {
68- message : 'Contact submission received successfully' ,
90+ message :
91+ feedbackType === 'general'
92+ ? 'Feedback submitted successfully'
93+ : 'Contact submission received successfully' ,
6994 contactId : contact . contactId ,
7095 } ) ;
7196 } catch ( error ) {
0 commit comments