@@ -10,10 +10,10 @@ import { SurveyType } from "../../lib/enums/survey.js"
10
10
import { FollowupFactory } from "../lib/followup-factory.js"
11
11
import { FetchSurvey } from "../../lib/types/survey.d.js"
12
12
import Request from "../types/express.d.js"
13
- import { phoneNumberValidation } from "../../lib/phone-number.js"
14
13
import config from "../config/index.js"
15
14
import { sendSimulationResultsEmail } from "../lib/messaging/email/email-service.js"
16
15
import { sendSimulationResultsSms } from "../lib/messaging/sms/sms-service.js"
16
+ import { ErrorType , ErrorStatus , ErrorName } from "../../lib/enums/error.js"
17
17
18
18
export function followup (
19
19
req : Request ,
@@ -39,23 +39,6 @@ export function followup(
39
39
} )
40
40
}
41
41
42
- async function sendFollowupNotifications ( followup : Followup , res : Response ) {
43
- const { email, phone } = followup
44
- if ( phone ) {
45
- if (
46
- phoneNumberValidation ( phone , config . smsService . internationalDiallingCodes )
47
- ) {
48
- await sendSimulationResultsSms ( followup )
49
- } else {
50
- return res . status ( 422 ) . send ( "Unsupported phone number format" )
51
- }
52
- }
53
- if ( email ) {
54
- await sendSimulationResultsEmail ( followup )
55
- }
56
- return res . send ( { result : "OK" } )
57
- }
58
-
59
42
async function createSimulationRecapUrl ( req : Request , res : Response ) {
60
43
const followup = await FollowupFactory . create ( req . simulation )
61
44
await followup . addSurveyIfMissing (
@@ -69,6 +52,7 @@ async function createSimulationRecapUrl(req: Request, res: Response) {
69
52
export async function persist ( req : Request , res : Response ) {
70
53
const { surveyOptin, email, phone } = req . body
71
54
const simulation = req . simulation
55
+
72
56
try {
73
57
if ( email || phone ) {
74
58
const followup = await FollowupFactory . createWithResults (
@@ -77,17 +61,27 @@ export async function persist(req: Request, res: Response) {
77
61
email ,
78
62
phone
79
63
)
80
- return sendFollowupNotifications ( followup , res )
81
- } else {
82
- return createSimulationRecapUrl ( req , res )
64
+ if ( email ) await sendSimulationResultsEmail ( followup )
65
+ if ( phone ) await sendSimulationResultsSms ( followup )
66
+ return res . send ( { result : "OK" } )
83
67
}
68
+
69
+ return createSimulationRecapUrl ( req , res )
84
70
} catch ( error : any ) {
85
71
Sentry . captureException ( error )
86
- if ( error . name === "ValidationError" ) {
87
- return res . status ( 403 ) . send ( error . message )
88
- } else {
89
- return res . status ( 500 ) . send ( `Error while persisting followup` )
72
+
73
+ let status : number = ErrorStatus . InternalServerError
74
+
75
+ if (
76
+ error . name === ErrorName . ValidationError ||
77
+ error . message === ErrorType . UnsupportedPhoneNumberFormat
78
+ ) {
79
+ status = ErrorStatus . UnprocessableEntity
90
80
}
81
+
82
+ return res
83
+ . status ( status )
84
+ . send ( error . message || ErrorType . PersistingFollowup )
91
85
}
92
86
}
93
87
@@ -117,7 +111,7 @@ export function showFollowup(req: Request, res: Response) {
117
111
} )
118
112
. catch ( ( error : Error ) => {
119
113
console . error ( "error" , error )
120
- return res . sendStatus ( 400 )
114
+ return res . sendStatus ( ErrorStatus . BadRequest )
121
115
} )
122
116
}
123
117
@@ -142,12 +136,13 @@ export function showSurveyResults(req: Request, res: Response) {
142
136
export function showSurveyResultByEmail ( req : Request , res : Response ) {
143
137
Followups . findByEmail ( req . params . email )
144
138
. then ( ( followups : Followup [ ] ) => {
145
- if ( ! followups || ! followups . length ) return res . sendStatus ( 404 )
139
+ if ( ! followups || ! followups . length )
140
+ return res . sendStatus ( ErrorStatus . NotFound )
146
141
res . send ( followups )
147
142
} )
148
143
. catch ( ( error : Error ) => {
149
144
console . error ( "error" , error )
150
- return res . sendStatus ( 400 )
145
+ return res . sendStatus ( ErrorStatus . BadRequest )
151
146
} )
152
147
}
153
148
@@ -160,7 +155,7 @@ export async function followupByAccessToken(
160
155
const followup : Followup | null = await Followups . findOne ( {
161
156
accessToken,
162
157
} )
163
- if ( ! followup ) return res . sendStatus ( 404 )
158
+ if ( ! followup ) return res . sendStatus ( ErrorStatus . NotFound )
164
159
req . followup = followup
165
160
next ( )
166
161
}
@@ -216,7 +211,7 @@ async function getRedirectUrl(req: Request) {
216
211
case SurveyType . TousABordNotification :
217
212
return "https://www.tadao.fr/713-Demandeur-d-emploi.html"
218
213
default :
219
- throw new Error ( `Unknown survey type : ${ surveyType } ` )
214
+ throw new Error ( `${ ErrorType . UnknownSurveyType } : ${ surveyType } ` )
220
215
}
221
216
}
222
217
@@ -227,7 +222,6 @@ export async function logSurveyLinkClick(req: Request, res: Response) {
227
222
res . redirect ( redirectUrl )
228
223
} catch ( error ) {
229
224
Sentry . captureException ( error )
230
- console . error ( "error" , error )
231
- return res . sendStatus ( 404 )
225
+ return res . sendStatus ( ErrorStatus . NotFound )
232
226
}
233
227
}
0 commit comments