tango-app-api-audit 3.4.24 → 3.4.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +3 -1
- package/package.json +1 -1
- package/src/controllers/audit.controllers.js +2 -2
- package/src/controllers/auditWallet.controllers.js +45 -0
- package/src/controllers/traxAudit.controllers.js +38 -2
- package/src/docs/auditWallet.docs.js +197 -0
- package/src/dtos/auditWallet.dtos.js +50 -0
- package/src/routes/auditWallet.routes.js +18 -0
- package/src/validation/auditWallet.validation.js +36 -0
package/index.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { auditRouter } from './src/routes/audit.routes.js';
|
|
4
4
|
import { traxAuditRouter } from './src/routes/traxAudit.routes.js';
|
|
5
|
+
import { auditWalletRouter } from './src/routes/auditWallet.routes.js';
|
|
5
6
|
import { auditDocs } from './src/docs/audit.docs.js';
|
|
6
7
|
import { traxAuditDocs } from './src/docs/traxAudit.docs.js';
|
|
8
|
+
import { auditWalletDocs } from './src/docs/auditWallet.docs.js';
|
|
7
9
|
|
|
8
|
-
export { auditRouter, auditDocs, traxAuditRouter, traxAuditDocs };
|
|
10
|
+
export { auditRouter, auditDocs, traxAuditRouter, traxAuditDocs, auditWalletRouter, auditWalletDocs };
|
|
9
11
|
|
|
10
12
|
|
package/package.json
CHANGED
|
@@ -3950,7 +3950,7 @@ export async function getUserAuditCount( req, res ) {
|
|
|
3950
3950
|
// if ( isFirstDay ) {
|
|
3951
3951
|
// await updateManyAuditUsers( {}, { lateLogin: 0 } );
|
|
3952
3952
|
// }
|
|
3953
|
-
for ( let i =
|
|
3953
|
+
for ( let i =2; i<32; i++ ) {
|
|
3954
3954
|
const userWallet = JSON.parse( process.env.USER_WALLET );
|
|
3955
3955
|
const previousDate = dayjs( new Date() ).subtract( i, 'days' );
|
|
3956
3956
|
const fileDate = dayjs( previousDate ).format( 'DD-MM-YYYY' );
|
|
@@ -4345,7 +4345,7 @@ export async function getUserAuditCount( req, res ) {
|
|
|
4345
4345
|
if ( result.length == 0 ) {
|
|
4346
4346
|
return res.sendError( 'No Record Inserted', 500 );
|
|
4347
4347
|
}
|
|
4348
|
-
if ( i ==
|
|
4348
|
+
if ( i == 31 ) {
|
|
4349
4349
|
return res.sendSuccess( { message: 'Inserted successfully!' } );
|
|
4350
4350
|
}
|
|
4351
4351
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export async function auditUserSummary( req, res ) {
|
|
2
|
+
try {
|
|
3
|
+
const inputData =req.query;
|
|
4
|
+
return res.sendSuccess( { result: inputData } );
|
|
5
|
+
} catch ( error ) {
|
|
6
|
+
const err = error.message || 'Internal Server Error';
|
|
7
|
+
logger.error( { error: error, message: req.query, function: 'auditUserSummary' } );
|
|
8
|
+
return res.sendError( err, 500 );
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function getAuditUserDetails( req, res ) {
|
|
13
|
+
try {
|
|
14
|
+
const inputData =req.query;
|
|
15
|
+
return res.sendSuccess( { result: inputData } );
|
|
16
|
+
} catch ( error ) {
|
|
17
|
+
const err = error.message || 'Internal Server Error';
|
|
18
|
+
logger.error( { error: error, message: req.query, function: 'consolidatedCard' } );
|
|
19
|
+
return res.sendError( err, 500 );
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function consolidatedCard( req, res ) {
|
|
24
|
+
try {
|
|
25
|
+
const inputData =req.query;
|
|
26
|
+
return res.sendSuccess( { result: inputData } );
|
|
27
|
+
} catch ( error ) {
|
|
28
|
+
const err = error.message || 'Internal Server Error';
|
|
29
|
+
logger.error( { error: error, message: req.query, function: 'consolidatedCard' } );
|
|
30
|
+
return res.sendError( err, 500 );
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function auditWalletSummary( req, res ) {
|
|
35
|
+
try {
|
|
36
|
+
const inputData =req.query;
|
|
37
|
+
return res.sendSuccess( { result: inputData } );
|
|
38
|
+
} catch ( error ) {
|
|
39
|
+
const err = error.message || 'Internal Server Error';
|
|
40
|
+
logger.error( { error: error, message: req.query, function: 'consolidatedCard' } );
|
|
41
|
+
return res.sendError( err, 500 );
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { checkFileExist, chunkArray, download, getDate, getDateWithCustomizeTime, getUTC, insertOpenSearchData, listFileByPath, logger, signedUrl, sqsReceive } from 'tango-app-api-middleware';
|
|
1
|
+
import { checkFileExist, chunkArray, download, getDate, getDateWithCustomizeTime, getOpenSearchData, getUTC, insertOpenSearchData, listFileByPath, logger, signedUrl, sqsReceive, updateOpenSearchData } from 'tango-app-api-middleware';
|
|
2
2
|
import { aggregateBinaryAudit, createBinaryAudit, updateOneBinaryAuditModel } from '../service/binaryAudit.service.js';
|
|
3
3
|
import { countDocumentsStore, findOneStore } from '../service/store.service.js';
|
|
4
4
|
import { findOneUser } from '../service/user.service.js';
|
|
@@ -3979,7 +3979,43 @@ export async function save( req, res ) {
|
|
|
3979
3979
|
folderPath: getFilePath?.sqs?.Body?.folderPath,
|
|
3980
3980
|
createdAt: new Date(),
|
|
3981
3981
|
};
|
|
3982
|
-
|
|
3982
|
+
let filter= [
|
|
3983
|
+
{
|
|
3984
|
+
'term': {
|
|
3985
|
+
'storeId.keyword': inputData.storeId,
|
|
3986
|
+
},
|
|
3987
|
+
},
|
|
3988
|
+
{
|
|
3989
|
+
'term': {
|
|
3990
|
+
'fileDate.keyword': inputData.fileDate,
|
|
3991
|
+
},
|
|
3992
|
+
},
|
|
3993
|
+
];
|
|
3994
|
+
|
|
3995
|
+
inputData.moduleType === 'hygiene'?
|
|
3996
|
+
filter.push( {
|
|
3997
|
+
'term': {
|
|
3998
|
+
'zoneName.keyword': inputData.zoneName,
|
|
3999
|
+
},
|
|
4000
|
+
} ) : null;
|
|
4001
|
+
|
|
4002
|
+
let searchQuery={
|
|
4003
|
+
'size': 1,
|
|
4004
|
+
'query': {
|
|
4005
|
+
'bool': {
|
|
4006
|
+
'must': filter,
|
|
4007
|
+
},
|
|
4008
|
+
},
|
|
4009
|
+
};
|
|
4010
|
+
|
|
4011
|
+
const searchData= await getOpenSearchData( openSearch.nob, searchQuery );
|
|
4012
|
+
logger.info( { length: searchData?.body?.hits?.hits?.length, _id: searchData?.body?.hits?.hits[0]?._id, output: output } );
|
|
4013
|
+
if ( searchData?.body?.hits?.hits?.length >0 ) {
|
|
4014
|
+
await updateOpenSearchData( openSearch.traxDetectionOutput, searchData?.body?.hits?.hits[0]?._id, { doc: output } );
|
|
4015
|
+
} else {
|
|
4016
|
+
await insertOpenSearchData( openSearch.traxDetectionOutput, output );
|
|
4017
|
+
}
|
|
4018
|
+
|
|
3983
4019
|
const logData = {
|
|
3984
4020
|
userId: req.user._id,
|
|
3985
4021
|
userName: req.user.userName,
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import j2s from 'joi-to-swagger';
|
|
2
|
+
import { auditUserDetailsSchema, auditUserSummarySchema, auditWalletSummarySchema, consolidatedCardSASchema } from '../dtos/auditWallet.dtos.js';
|
|
3
|
+
|
|
4
|
+
export const auditWalletDocs = {
|
|
5
|
+
|
|
6
|
+
'/v3/audit-wallet/audit-user-summary': {
|
|
7
|
+
get: {
|
|
8
|
+
tags: [ 'Audit Wallet' ],
|
|
9
|
+
description: 'Consolidated wallet details of each audit users for a superadmin view',
|
|
10
|
+
operationId: 'audit-user-summary',
|
|
11
|
+
parameters: [
|
|
12
|
+
{
|
|
13
|
+
in: 'query',
|
|
14
|
+
name: 'fromDate',
|
|
15
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
16
|
+
require: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
in: 'query',
|
|
20
|
+
name: 'toDate',
|
|
21
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
22
|
+
require: true,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
in: 'query',
|
|
26
|
+
name: 'searchValue',
|
|
27
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
28
|
+
require: false,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
in: 'query',
|
|
32
|
+
name: 'limit',
|
|
33
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
34
|
+
require: false,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
in: 'query',
|
|
38
|
+
name: 'offset',
|
|
39
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
40
|
+
require: false,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
in: 'query',
|
|
44
|
+
name: 'isExport',
|
|
45
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
46
|
+
require: false,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
in: 'query',
|
|
50
|
+
name: 'sortColumnName',
|
|
51
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
52
|
+
require: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
in: 'query',
|
|
56
|
+
name: 'sortBy',
|
|
57
|
+
scema: j2s( auditUserSummarySchema ).swagger,
|
|
58
|
+
require: true,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
responses: {
|
|
62
|
+
200: { description: 'Successful' },
|
|
63
|
+
401: { description: 'Unauthorized User' },
|
|
64
|
+
422: { description: 'Field Error' },
|
|
65
|
+
500: { description: 'Server Error' },
|
|
66
|
+
204: { description: 'Not Found' },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
'/v3/audit-wallet/get-audit-user-details': {
|
|
71
|
+
get: {
|
|
72
|
+
tags: [ 'Audit Wallet' ],
|
|
73
|
+
description: 'get a user personal info and assigned client count',
|
|
74
|
+
operationId: 'get-audit-user-details',
|
|
75
|
+
parameters: [
|
|
76
|
+
{
|
|
77
|
+
in: 'query',
|
|
78
|
+
name: 'userId',
|
|
79
|
+
scema: j2s( auditUserDetailsSchema ).swagger,
|
|
80
|
+
require: true,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
responses: {
|
|
84
|
+
200: { description: 'Successful' },
|
|
85
|
+
401: { description: 'Unauthorized User' },
|
|
86
|
+
422: { description: 'Field Error' },
|
|
87
|
+
500: { description: 'Server Error' },
|
|
88
|
+
204: { description: 'Not Found' },
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
'/v3/audit-wallet/consolidated-card': {
|
|
93
|
+
get: {
|
|
94
|
+
tags: [ 'Audit Wallet' ],
|
|
95
|
+
description: 'get consolidated of wallet details card of a audit user',
|
|
96
|
+
operationId: 'consolidated-card',
|
|
97
|
+
parameters: [
|
|
98
|
+
{
|
|
99
|
+
in: 'query',
|
|
100
|
+
name: 'fromDate',
|
|
101
|
+
scema: j2s( consolidatedCardSASchema ).swagger,
|
|
102
|
+
require: false,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
in: 'query',
|
|
106
|
+
name: 'toDate',
|
|
107
|
+
scema: j2s( consolidatedCardSASchema ).swagger,
|
|
108
|
+
require: false,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
in: 'query',
|
|
112
|
+
name: 'userId',
|
|
113
|
+
scema: j2s( consolidatedCardSASchema ).swagger,
|
|
114
|
+
require: false,
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
responses: {
|
|
118
|
+
200: { description: 'Successful' },
|
|
119
|
+
401: { description: 'Unauthorized User' },
|
|
120
|
+
422: { description: 'Field Error' },
|
|
121
|
+
500: { description: 'Server Error' },
|
|
122
|
+
204: { description: 'Not Found' },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
'/v3/audit-wallet/audit-wallet-summary': {
|
|
128
|
+
get: {
|
|
129
|
+
tags: [ 'Audit Wallet' ],
|
|
130
|
+
description: 'Get a file via queue message',
|
|
131
|
+
operationId: 'audit-wallet-summary',
|
|
132
|
+
parameters: [
|
|
133
|
+
{
|
|
134
|
+
in: 'query',
|
|
135
|
+
name: 'fromDate',
|
|
136
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
137
|
+
require: true,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
in: 'query',
|
|
141
|
+
name: 'fromDate',
|
|
142
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
143
|
+
require: true,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
in: 'query',
|
|
147
|
+
name: 'toDate',
|
|
148
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
149
|
+
require: true,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
in: 'query',
|
|
153
|
+
name: 'searchValue',
|
|
154
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
155
|
+
require: false,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
in: 'query',
|
|
159
|
+
name: 'limit',
|
|
160
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
161
|
+
require: false,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
in: 'query',
|
|
165
|
+
name: 'offset',
|
|
166
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
167
|
+
require: false,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
in: 'query',
|
|
171
|
+
name: 'isExport',
|
|
172
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
173
|
+
require: false,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
in: 'query',
|
|
177
|
+
name: 'sortColumnName',
|
|
178
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
179
|
+
require: true,
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
in: 'query',
|
|
183
|
+
name: 'sortBy',
|
|
184
|
+
scema: j2s( auditWalletSummarySchema ).swagger,
|
|
185
|
+
require: true,
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
responses: {
|
|
189
|
+
200: { description: 'Successful' },
|
|
190
|
+
401: { description: 'Unauthorized User' },
|
|
191
|
+
422: { description: 'Field Error' },
|
|
192
|
+
500: { description: 'Server Error' },
|
|
193
|
+
204: { description: 'Not Found' },
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import joi from 'joi';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const auditUserSummarySchema = joi.object( {
|
|
5
|
+
fromDate: joi.string().optional(),
|
|
6
|
+
toDate: joi.string().optional(),
|
|
7
|
+
searchValue: joi.string().optional().allow( '' ),
|
|
8
|
+
limit: joi.number().optional(),
|
|
9
|
+
offset: joi.number().optional(),
|
|
10
|
+
isExport: joi.boolean().optional(),
|
|
11
|
+
sortColumnName: joi.string().optional(),
|
|
12
|
+
sortBy: joi.number().optional(),
|
|
13
|
+
} );
|
|
14
|
+
|
|
15
|
+
export const auditUserSummaryValid = {
|
|
16
|
+
query: auditUserSummarySchema,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const consolidatedCardSASchema = joi.object( {
|
|
20
|
+
fromDate: joi.string().required(),
|
|
21
|
+
toDate: joi.string().required(),
|
|
22
|
+
userId: joi.string().required(),
|
|
23
|
+
} );
|
|
24
|
+
|
|
25
|
+
export const consolidatedCardSAValid = {
|
|
26
|
+
query: consolidatedCardSASchema,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const auditUserDetailsSchema = joi.object( {
|
|
30
|
+
userId: joi.string().required(),
|
|
31
|
+
} );
|
|
32
|
+
|
|
33
|
+
export const auditUserDetailsValid = {
|
|
34
|
+
query: auditUserDetailsSchema,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const auditWalletSummarySchema = joi.object( {
|
|
38
|
+
fromDate: joi.string().optional(),
|
|
39
|
+
toDate: joi.string().optional(),
|
|
40
|
+
searchValue: joi.string().optional().allow( '' ),
|
|
41
|
+
limit: joi.number().optional(),
|
|
42
|
+
offset: joi.number().optional(),
|
|
43
|
+
isExport: joi.boolean().optional(),
|
|
44
|
+
sortColumnName: joi.string().optional(),
|
|
45
|
+
sortBy: joi.number().optional(),
|
|
46
|
+
} );
|
|
47
|
+
|
|
48
|
+
export const auditWalletSummaryValid = {
|
|
49
|
+
query: auditWalletSummarySchema,
|
|
50
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { auditUserDetailsValid, auditUserSummaryValid, auditWalletSummaryValid } from '../dtos/auditWallet.dtos.js';
|
|
3
|
+
import { roleValidate, roleVerification } from '../validation/auditWallet.validation.js';
|
|
4
|
+
import { accessVerification, isAllowedSessionHandler, validate } from 'tango-app-api-middleware';
|
|
5
|
+
import { auditUserSummary, auditWalletSummary, consolidatedCard, getAuditUserDetails } from '../controllers/auditWallet.controllers.js';
|
|
6
|
+
|
|
7
|
+
export const auditWalletRouter = Router();
|
|
8
|
+
|
|
9
|
+
// superadmin - view
|
|
10
|
+
auditWalletRouter.get( '/audit-user-summary', isAllowedSessionHandler, accessVerification( { userType: [ 'tango' ] } ), roleVerification, validate( auditUserSummaryValid ), auditUserSummary );
|
|
11
|
+
|
|
12
|
+
// single user view
|
|
13
|
+
auditWalletRouter.get( '/get-audit-user-details', isAllowedSessionHandler, accessVerification( { userType: [ 'tango' ] } ), validate( auditUserDetailsValid ), getAuditUserDetails );
|
|
14
|
+
auditWalletRouter.get( '/consolidated-card', isAllowedSessionHandler, accessVerification( { userType: [ 'tango' ] } ), roleValidate, consolidatedCard );
|
|
15
|
+
auditWalletRouter.get( '/audit-wallet-summary', isAllowedSessionHandler, accessVerification( { userType: [ 'tango' ] } ), validate( auditWalletSummaryValid ), auditWalletSummary );
|
|
16
|
+
|
|
17
|
+
export default auditWalletRouter;
|
|
18
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { validate } from 'tango-app-api-middleware';
|
|
2
|
+
import { consolidatedCardSAValid } from '../dtos/auditWallet.dtos.js';
|
|
3
|
+
|
|
4
|
+
export async function roleVerification( req, res, next ) {
|
|
5
|
+
try {
|
|
6
|
+
if ( [ 'superadmin' ].includes( req?.user?.role ) ) {
|
|
7
|
+
return next();
|
|
8
|
+
} else {
|
|
9
|
+
return res.sendError( 'access forbidden', 403 );
|
|
10
|
+
}
|
|
11
|
+
} catch ( error ) {
|
|
12
|
+
const err = error.message || 'Internal Server Error';
|
|
13
|
+
logger.error( { error: error, message: req.body, function: 'roleVerification' } );
|
|
14
|
+
return res.sendError( err, 500 );
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function roleValidate( req, res, next ) {
|
|
19
|
+
try {
|
|
20
|
+
if ( [ 'superadmin' ].includes( req?.user?.role ) ) {
|
|
21
|
+
validate( consolidatedCardSAValid );
|
|
22
|
+
return next();
|
|
23
|
+
} else {
|
|
24
|
+
const yesterday = dayjs( new Date() ).subtract( 1, 'days' );
|
|
25
|
+
const yesterdayFT = new Date( dayjs( yesterday ).format( 'YYYY-MM-DD' ) );
|
|
26
|
+
req.query = req.user._id;
|
|
27
|
+
req.fromDate = yesterdayFT;
|
|
28
|
+
req.toDate = yesterdayFT;
|
|
29
|
+
return next();
|
|
30
|
+
}
|
|
31
|
+
} catch ( error ) {
|
|
32
|
+
const err = error.message || 'Internal Server Error';
|
|
33
|
+
logger.error( { error: error, message: req.body, function: 'roleValidate' } );
|
|
34
|
+
return res.sendError( err, 500 );
|
|
35
|
+
}
|
|
36
|
+
}
|