@@ -14,73 +14,156 @@ const { parseQueryParams } = require("../utils/queryParser");
14
14
* @param res {Object} - Express response object
15
15
*/
16
16
const createTaskExtensionRequest = async ( req , res ) => {
17
- try {
18
- const extensionBody = req . body ;
19
-
20
- let assigneeUsername = await getUsernameElseUndefined ( extensionBody . assignee ) ;
21
- let assigneeId = extensionBody . assignee ;
22
- if ( ! assigneeUsername ) {
23
- assigneeId = await getUserIdElseUndefined ( extensionBody . assignee ) ;
24
- assigneeUsername = extensionBody . assignee ;
25
- extensionBody . assignee = assigneeId ;
26
- }
17
+ const dev = req . query . dev === "true" ;
18
+ if ( dev ) {
19
+ try {
20
+ let extensionBody = req . body ;
27
21
28
- if ( ! assigneeId ) {
29
- return res . boom . badRequest ( "User with this id or username doesn't exist." ) ;
30
- }
22
+ let assigneeUsername = await getUsernameElseUndefined ( extensionBody . assignee ) ;
23
+ let assigneeId = extensionBody . assignee ;
24
+ if ( ! assigneeUsername ) {
25
+ assigneeId = await getUserIdElseUndefined ( extensionBody . assignee ) ;
26
+ assigneeUsername = extensionBody . assignee ;
27
+ extensionBody . assignee = assigneeId ;
28
+ }
31
29
32
- if ( req . userData . id !== extensionBody . assignee && ! req . userData . roles ?. super_user ) {
33
- return res . boom . forbidden ( "Only assigned user and super user can create an extension request for this task. ") ;
34
- }
30
+ if ( ! assigneeId ) {
31
+ return res . boom . badRequest ( "User Not Found ") ;
32
+ }
35
33
36
- const { taskData : task } = await tasks . fetchTask ( extensionBody . taskId ) ;
37
- if ( ! task ) {
38
- return res . boom . badRequest ( "Task with this id or taskid doesn't exist." ) ;
39
- }
40
- if ( task . assignee !== assigneeUsername ) {
41
- return res . boom . badRequest ( "This task is assigned to some different user" ) ;
42
- }
43
- if ( task . endsOn >= extensionBody . newEndsOn ) {
44
- return res . boom . badRequest ( "The value for newEndsOn should be greater than the previous ETA" ) ;
45
- }
46
- if ( extensionBody . oldEndsOn !== task . endsOn ) {
47
- extensionBody . oldEndsOn = task . endsOn ;
48
- }
34
+ if ( req . userData . id !== extensionBody . assignee && ! req . userData . roles ?. super_user ) {
35
+ return res . boom . forbidden ( "Only assigned user and super user can create an extension request for this task." ) ;
36
+ }
49
37
50
- const prevExtensionRequest = await extensionRequestsQuery . fetchExtensionRequests ( {
51
- taskId : extensionBody . taskId ,
52
- assignee : extensionBody . assignee ,
53
- } ) ;
54
- if ( prevExtensionRequest . length ) {
55
- return res . boom . forbidden ( "An extension request for this task already exists." ) ;
38
+ const { taskData : task } = await tasks . fetchTask ( extensionBody . taskId ) ;
39
+ if ( ! task ) {
40
+ return res . boom . badRequest ( "Task Not Found" ) ;
41
+ }
42
+ if ( task . assignee !== assigneeUsername ) {
43
+ return res . boom . badRequest ( "This task is assigned to some different user." ) ;
44
+ }
45
+ if ( task . endsOn >= extensionBody . newEndsOn ) {
46
+ return res . boom . badRequest ( "New ETA must be greater than Old ETA" ) ;
47
+ }
48
+ if ( extensionBody . oldEndsOn !== task . endsOn ) {
49
+ extensionBody . oldEndsOn = task . endsOn ;
50
+ }
51
+
52
+ const latestExtensionRequest = await extensionRequestsQuery . fetchLatestExtensionRequest ( {
53
+ taskId : extensionBody . taskId ,
54
+ } ) ;
55
+
56
+ if ( latestExtensionRequest && latestExtensionRequest . status === EXTENSION_REQUEST_STATUS . PENDING ) {
57
+ return res . boom . badRequest ( "An extension request for this task already exists." ) ;
58
+ }
59
+
60
+ let requestNumber ;
61
+ if ( latestExtensionRequest && latestExtensionRequest . assigneeId === assigneeId ) {
62
+ if ( latestExtensionRequest . requestNumber && latestExtensionRequest . requestNumber > 0 ) {
63
+ requestNumber = latestExtensionRequest . requestNumber + 1 ;
64
+ extensionBody = { ...extensionBody , requestNumber } ;
65
+ } else {
66
+ extensionBody = { ...extensionBody , requestNumber : 2 } ;
67
+ }
68
+ } else {
69
+ extensionBody = { ...extensionBody , requestNumber : 1 } ;
70
+ }
71
+
72
+ const extensionRequest = await extensionRequestsQuery . createExtensionRequest ( extensionBody ) ;
73
+ const extensionLog = {
74
+ type : "extensionRequests" ,
75
+ meta : {
76
+ taskId : extensionBody . taskId ,
77
+ createdBy : req . userData . id ,
78
+ } ,
79
+ body : {
80
+ extensionRequestId : extensionRequest . id ,
81
+ oldEndsOn : task . endsOn ,
82
+ newEndsOn : extensionBody . newEndsOn ,
83
+ assignee : extensionBody . assignee ,
84
+ status : EXTENSION_REQUEST_STATUS . PENDING ,
85
+ } ,
86
+ } ;
87
+
88
+ await addLog ( extensionLog . type , extensionLog . meta , extensionLog . body ) ;
89
+
90
+ return res . json ( {
91
+ message : "Extension Request created successfully!" ,
92
+ extensionRequest : { ...extensionBody , id : extensionRequest . id } ,
93
+ } ) ;
94
+ } catch ( err ) {
95
+ logger . error ( `Error while creating new extension request: ${ err } ` ) ;
96
+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
56
97
}
98
+ } else {
99
+ try {
100
+ const extensionBody = req . body ;
57
101
58
- const extensionRequest = await extensionRequestsQuery . createExtensionRequest ( extensionBody ) ;
102
+ let assigneeUsername = await getUsernameElseUndefined ( extensionBody . assignee ) ;
103
+ let assigneeId = extensionBody . assignee ;
104
+ if ( ! assigneeUsername ) {
105
+ assigneeId = await getUserIdElseUndefined ( extensionBody . assignee ) ;
106
+ assigneeUsername = extensionBody . assignee ;
107
+ extensionBody . assignee = assigneeId ;
108
+ }
59
109
60
- const extensionLog = {
61
- type : "extensionRequests" ,
62
- meta : {
110
+ if ( ! assigneeId ) {
111
+ return res . boom . badRequest ( "User with this id or username doesn't exist." ) ;
112
+ }
113
+
114
+ if ( req . userData . id !== extensionBody . assignee && ! req . userData . roles ?. super_user ) {
115
+ return res . boom . forbidden ( "Only assigned user and super user can create an extension request for this task." ) ;
116
+ }
117
+
118
+ const { taskData : task } = await tasks . fetchTask ( extensionBody . taskId ) ;
119
+ if ( ! task ) {
120
+ return res . boom . badRequest ( "Task with this id or taskid doesn't exist." ) ;
121
+ }
122
+ if ( task . assignee !== assigneeUsername ) {
123
+ return res . boom . badRequest ( "This task is assigned to some different user" ) ;
124
+ }
125
+ if ( task . endsOn >= extensionBody . newEndsOn ) {
126
+ return res . boom . badRequest ( "The value for newEndsOn should be greater than the previous ETA" ) ;
127
+ }
128
+ if ( extensionBody . oldEndsOn !== task . endsOn ) {
129
+ extensionBody . oldEndsOn = task . endsOn ;
130
+ }
131
+
132
+ const prevExtensionRequest = await extensionRequestsQuery . fetchExtensionRequests ( {
63
133
taskId : extensionBody . taskId ,
64
- createdBy : req . userData . id ,
65
- } ,
66
- body : {
67
- extensionRequestId : extensionRequest . id ,
68
- oldEndsOn : task . endsOn ,
69
- newEndsOn : extensionBody . newEndsOn ,
70
134
assignee : extensionBody . assignee ,
71
- status : EXTENSION_REQUEST_STATUS . PENDING ,
72
- } ,
73
- } ;
135
+ } ) ;
136
+ if ( prevExtensionRequest . length ) {
137
+ return res . boom . forbidden ( "An extension request for this task already exists." ) ;
138
+ }
74
139
75
- await addLog ( extensionLog . type , extensionLog . meta , extensionLog . body ) ;
140
+ const extensionRequest = await extensionRequestsQuery . createExtensionRequest ( extensionBody ) ;
76
141
77
- return res . json ( {
78
- message : "Extension Request created successfully!" ,
79
- extensionRequest : { ...extensionBody , id : extensionRequest . id } ,
80
- } ) ;
81
- } catch ( err ) {
82
- logger . error ( `Error while creating new extension request: ${ err } ` ) ;
83
- return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
142
+ const extensionLog = {
143
+ type : "extensionRequests" ,
144
+ meta : {
145
+ taskId : extensionBody . taskId ,
146
+ createdBy : req . userData . id ,
147
+ } ,
148
+ body : {
149
+ extensionRequestId : extensionRequest . id ,
150
+ oldEndsOn : task . endsOn ,
151
+ newEndsOn : extensionBody . newEndsOn ,
152
+ assignee : extensionBody . assignee ,
153
+ status : EXTENSION_REQUEST_STATUS . PENDING ,
154
+ } ,
155
+ } ;
156
+
157
+ await addLog ( extensionLog . type , extensionLog . meta , extensionLog . body ) ;
158
+
159
+ return res . json ( {
160
+ message : "Extension Request created successfully!" ,
161
+ extensionRequest : { ...extensionBody , id : extensionRequest . id } ,
162
+ } ) ;
163
+ } catch ( err ) {
164
+ logger . error ( `Error while creating new extension request: ${ err } ` ) ;
165
+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
166
+ }
84
167
}
85
168
} ;
86
169
@@ -132,19 +215,47 @@ const getExtensionRequest = async (req, res) => {
132
215
* @param res {Object} - Express response object
133
216
*/
134
217
const getSelfExtensionRequests = async ( req , res ) => {
218
+ const dev = req . query . dev === "true" ;
219
+
135
220
try {
136
221
const { id : userId } = req . userData ;
137
222
const { taskId, status } = req . query ;
138
223
139
- if ( userId ) {
140
- const allExtensionRequests = await extensionRequestsQuery . fetchExtensionRequests ( {
141
- status,
142
- taskId,
143
- assignee : userId ,
144
- } ) ;
145
- return res . json ( { message : "Extension Requests returned successfully!" , allExtensionRequests } ) ;
224
+ if ( dev ) {
225
+ if ( userId ) {
226
+ let allExtensionRequests ;
227
+ if ( taskId ) {
228
+ const latestExtensionRequest = await extensionRequestsQuery . fetchLatestExtensionRequest ( {
229
+ taskId,
230
+ } ) ;
231
+
232
+ if ( latestExtensionRequest && latestExtensionRequest . assigneeId !== userId ) {
233
+ allExtensionRequests = [ ] ;
234
+ } else {
235
+ allExtensionRequests = [ latestExtensionRequest ] ;
236
+ }
237
+ } else {
238
+ allExtensionRequests = await extensionRequestsQuery . fetchExtensionRequests ( {
239
+ assignee : userId ,
240
+ status : status || undefined ,
241
+ } ) ;
242
+ }
243
+ return res . json ( { message : "Extension Requests returned successfully!" , allExtensionRequests } ) ;
244
+ } else {
245
+ return res . boom . notFound ( "User doesn't exist" ) ;
246
+ }
247
+ } else {
248
+ if ( userId ) {
249
+ const allExtensionRequests = await extensionRequestsQuery . fetchExtensionRequests ( {
250
+ taskId,
251
+ assignee : userId ,
252
+ status : status || undefined ,
253
+ } ) ;
254
+ return res . json ( { message : "Extension Requests returned successfully!" , allExtensionRequests } ) ;
255
+ } else {
256
+ return res . boom . notFound ( "User doesn't exist" ) ;
257
+ }
146
258
}
147
- return res . boom . notFound ( "User doesn't exist" ) ;
148
259
} catch ( error ) {
149
260
logger . error ( `Error while fetching extension requests: ${ error } ` ) ;
150
261
return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
0 commit comments