1
- import { OooRequestResponse , OooRequestCreateRequest , OooRequestUpdateRequest } from "../types/oooRequest" ;
2
- import { REQUEST_TYPE } from "../constants/request" ;
3
- import { createOooRequestController , updateOooRequestController } from "./oooRequests" ;
1
+ import {
2
+ ERROR_WHILE_FETCHING_REQUEST ,
3
+ ERROR_WHILE_CREATING_REQUEST ,
4
+ ERROR_WHILE_UPDATING_REQUEST ,
5
+ REQUEST_REJECTED_SUCCESSFULLY ,
6
+ REQUEST_APPROVED_SUCCESSFULLY ,
7
+ REQUEST_FETCHED_SUCCESSFULLY ,
8
+ REQUEST_CREATED_SUCCESSFULLY ,
9
+ REQUEST_STATE ,
10
+ LOG_ACTION ,
11
+ REQUEST_LOG_TYPE ,
12
+ } from "../constants/requests" ;
13
+ import { createRequest , getRequests , updateRequest } from "../models/requests" ;
14
+ import { addLog } from "../models/logs" ;
4
15
5
- export const createRequestController = async (
6
- req : OooRequestCreateRequest ,
7
- res : OooRequestResponse
8
- ) => {
9
- const type = req . body . type ;
10
- switch ( type ) {
11
- case REQUEST_TYPE . OOO :
12
- return await createOooRequestController ( req as OooRequestCreateRequest , res as OooRequestResponse ) ;
13
- default :
14
- return res . boom . badRequest ( "Invalid request type" ) ;
16
+ export const createRequestController = async ( req : any , res : any ) => {
17
+ const requestBody = req . body ;
18
+ const userId = req ?. userData ?. id ;
19
+ if ( ! userId ) {
20
+ return res . boom . unauthorized ( ) ;
21
+ }
22
+
23
+ try {
24
+ const requestResult = await createRequest ( { requestedBy : userId , ...requestBody } ) ;
25
+ if ( "error" in requestResult ) {
26
+ const requestLog = {
27
+ type : REQUEST_LOG_TYPE . REQUEST_BLOCKED ,
28
+ meta : {
29
+ action : LOG_ACTION . ERRORS ,
30
+ createdBy : userId ,
31
+ createdAt : Date . now ( ) ,
32
+ } ,
33
+ body : {
34
+ error : requestResult . error ,
35
+ ...requestBody ,
36
+ } ,
37
+ } ;
38
+ await addLog ( requestLog . type , requestLog . meta , requestLog . body ) ;
39
+
40
+ return res . boom . badRequest ( requestResult . error ) ;
41
+ } else {
42
+ const requestLog = {
43
+ type : REQUEST_LOG_TYPE . REQUEST_CREATED ,
44
+ meta : {
45
+ requestId : requestResult . id ,
46
+ action : LOG_ACTION . CREATE ,
47
+ createdBy : userId ,
48
+ createdAt : Date . now ( ) ,
49
+ } ,
50
+ body : requestResult ,
51
+ } ;
52
+ await addLog ( requestLog . type , requestLog . meta , requestLog . body ) ;
53
+ return res . status ( 201 ) . json ( {
54
+ message : REQUEST_CREATED_SUCCESSFULLY ,
55
+ data : {
56
+ id : requestResult . id ,
57
+ ...requestResult ,
58
+ } ,
59
+ } ) ;
60
+ }
61
+ } catch ( err ) {
62
+ logger . error ( ERROR_WHILE_CREATING_REQUEST , err ) ;
63
+ return res . boom . badImplementation ( ERROR_WHILE_CREATING_REQUEST ) ;
64
+ }
65
+ } ;
66
+
67
+ export const updateRequestController = async ( req : any , res : any ) => {
68
+ const requestBody = req . body ;
69
+ const userId = req ?. userData ?. id ;
70
+ const requestId = req . params . id ;
71
+ if ( ! userId ) {
72
+ return res . boom . unauthorized ( ) ;
73
+ }
74
+
75
+ try {
76
+ const requestResult = await updateRequest ( requestId , requestBody , userId ) ;
77
+ if ( "error" in requestResult ) {
78
+ return res . boom . badRequest ( requestResult . error ) ;
79
+ }
80
+ const [ logType , returnMessage ] =
81
+ requestResult . state === REQUEST_STATE . APPROVED
82
+ ? [ REQUEST_LOG_TYPE . REQUEST_APPROVED , REQUEST_APPROVED_SUCCESSFULLY ]
83
+ : [ REQUEST_LOG_TYPE . REQUEST_REJECTED , REQUEST_REJECTED_SUCCESSFULLY ] ;
84
+
85
+ const requestLog = {
86
+ type : logType ,
87
+ meta : {
88
+ requestId : requestId ,
89
+ action : LOG_ACTION . UPDATE ,
90
+ createdBy : userId ,
91
+ createdAt : Date . now ( ) ,
92
+ } ,
93
+ body : requestResult ,
94
+ } ;
95
+ await addLog ( requestLog . type , requestLog . meta , requestLog . body ) ;
96
+ return res . status ( 201 ) . json ( {
97
+ message : returnMessage ,
98
+ data : {
99
+ id : requestResult . id ,
100
+ ...requestResult ,
101
+ } ,
102
+ } ) ;
103
+ } catch ( err ) {
104
+ logger . error ( ERROR_WHILE_UPDATING_REQUEST , err ) ;
105
+ return res . boom . badImplementation ( ERROR_WHILE_UPDATING_REQUEST ) ;
15
106
}
16
107
} ;
17
108
18
- export const updateRequestController = async (
19
- req : OooRequestUpdateRequest ,
20
- res : OooRequestResponse
21
- ) => {
22
- const type = req . body . type ;
23
- switch ( type ) {
24
- case REQUEST_TYPE . OOO :
25
- return await updateOooRequestController ( req as OooRequestUpdateRequest , res as OooRequestResponse ) ;
26
- default :
27
- return res . boom . badRequest ( "Invalid request type" ) ;
109
+ export const getRequestsController = async ( req : any , res : any ) => {
110
+ const { query } = req ;
111
+ try {
112
+ const requests = await getRequests ( query ) ;
113
+ if ( ! requests ) {
114
+ return res . status ( 204 ) . send ( ) ;
115
+ }
116
+ return res . status ( 200 ) . send ( {
117
+ message : REQUEST_FETCHED_SUCCESSFULLY ,
118
+ data : requests ,
119
+ } ) ;
120
+ } catch ( err ) {
121
+ logger . error ( ERROR_WHILE_FETCHING_REQUEST , err ) ;
122
+ return res . boom . badImplementation ( ERROR_WHILE_FETCHING_REQUEST ) ;
28
123
}
29
- } ;
124
+ } ;
0 commit comments