tango-app-api-audit 1.0.11 → 1.0.13
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tango-app-api-audit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "audit & audit metrics apis",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"mongodb": "^6.7.0",
|
|
24
24
|
"nodemon": "^3.1.3",
|
|
25
25
|
"swagger-ui-express": "^5.0.1",
|
|
26
|
-
"tango-api-schema": "^2.0.
|
|
26
|
+
"tango-api-schema": "^2.0.122",
|
|
27
27
|
"tango-app-api-middleware": "^3.1.24",
|
|
28
28
|
"winston": "^3.13.0",
|
|
29
29
|
"winston-daily-rotate-file": "^5.0.0"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { chunkArray, download, getJsonFileData,
|
|
1
|
+
import { chunkArray, download, getJsonFileData, getUTC, insertOpenSearchData, listFileByPath, listFileWithoutLimit, signedUrl } from 'tango-app-api-middleware';
|
|
2
2
|
import { aggregateUserAudit, createUserAudit, findOneUserAudit, updateOneUserAudit } from '../service/userAudit.service.js';
|
|
3
3
|
import { aggregateAssignAudit, updateOneAssignAudit } from '../service/assignAudit.service.js';
|
|
4
4
|
import { findOneUser } from '../service/user.service.js';
|
|
@@ -9,10 +9,13 @@ import { listQueue, sqsReceive } from 'tango-app-api-middleware/src/utils/aws/sq
|
|
|
9
9
|
import { aggregateStoreAudit, createStoreAudit, updateOneStoreAudit } from '../service/storeAudit.service.js';
|
|
10
10
|
import { aggregateAuditClientData } from '../service/auditClientData.service.js';
|
|
11
11
|
import _ from 'lodash';
|
|
12
|
+
import { createAuditLog, findOneAuditLog } from '../service/auditLog.service.js';
|
|
13
|
+
import { findOneStore } from '../service/store.service.js';
|
|
12
14
|
|
|
13
15
|
export async function getAuditFile( req, res ) {
|
|
14
16
|
try {
|
|
15
17
|
const bucket = JSON.parse( process.env.BUCKET );
|
|
18
|
+
const openSearch = JSON.parse( process.env.OPENSEARCH );
|
|
16
19
|
const inputData = req.query;
|
|
17
20
|
const data = await getUTC( new Date(), new Date() );
|
|
18
21
|
const start = data.start;
|
|
@@ -84,64 +87,76 @@ export async function getAuditFile( req, res ) {
|
|
|
84
87
|
}
|
|
85
88
|
break;
|
|
86
89
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
90
|
+
case 'drafted':
|
|
91
|
+
logger.info( 'userDetails drafted', { inputData } );
|
|
92
|
+
const log = await findOneAuditLog( {
|
|
93
|
+
userId: userDetails[0].userId,
|
|
94
|
+
fileDate: userDetails[0].fileDate,
|
|
95
|
+
storeId: userDetails[0].storeId,
|
|
96
|
+
totalCount: userDetails[0].beforeCount,
|
|
97
|
+
}, {}, { createdAt: -1 } );
|
|
98
|
+
if ( !log ) {
|
|
99
|
+
await updateOneUserAudit( { _id: userDetails[0]._id }, { $set: { isDraft: false, auditStatus: 'skipped' } } );
|
|
100
|
+
logger.info( 'audit update in drafted', { _id: userDetails[0]._id, isDraft: false, auditStatus: 'skipped' } );
|
|
101
|
+
return res.sendError( 'User saved data has been deleted', 204 );
|
|
102
|
+
}
|
|
103
|
+
const file = {
|
|
104
|
+
auditId: userDetails[0]._id,
|
|
105
|
+
store_id: userDetails[0].storeId,
|
|
106
|
+
file_date: userDetails[0].fileDate,
|
|
107
|
+
type: userDetails[0].auditType,
|
|
108
|
+
queueName: log.queueName,
|
|
109
|
+
userId: log.userId,
|
|
110
|
+
};
|
|
111
|
+
const result = {
|
|
112
|
+
junk: log.junk,
|
|
113
|
+
junk_count: log.junkCount,
|
|
114
|
+
employee: log.employee,
|
|
115
|
+
employee_count: log.employeeCount,
|
|
116
|
+
customer: log.customer,
|
|
117
|
+
customer_count: log.customerCount,
|
|
118
|
+
retag_image: log.retagImage,
|
|
119
|
+
retag_count: log.retagCount,
|
|
120
|
+
total_count: log.totalCount,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const userdata = await findOneUser( { _id: log.userId } );
|
|
124
|
+
if ( !inputData.nextId || inputData.nextId === '' || inputData.nextId == null ) {
|
|
125
|
+
const logData = {
|
|
126
|
+
userId: log.userId,
|
|
127
|
+
userName: userdata.name,
|
|
128
|
+
logType: 'audit',
|
|
129
|
+
logSubType: 'auditStart',
|
|
130
|
+
logData: {
|
|
131
|
+
file_date: userDetails[0].fileDate,
|
|
132
|
+
auditType: userDetails[0].auditType,
|
|
133
|
+
storeId: userDetails[0].storeId,
|
|
134
|
+
clientName: log.queueName,
|
|
135
|
+
auditId: userDetails[0]._id,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
logger.info( { logData: logData } );
|
|
139
|
+
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
140
|
+
}
|
|
141
|
+
const storeQuery = {
|
|
142
|
+
storeId: userDetails[0].storeId,
|
|
143
|
+
};
|
|
144
|
+
const storeFields = {
|
|
145
|
+
storeId: 1,
|
|
146
|
+
storeName: 1,
|
|
147
|
+
address: '$storeProfile.address',
|
|
148
|
+
};
|
|
149
|
+
const storeDetails = await findOneStore( storeQuery, storeFields );
|
|
150
|
+
return res.sendSuccess( {
|
|
151
|
+
result: result,
|
|
152
|
+
storeId: storeDetails?.storeId,
|
|
153
|
+
storeName: storeDetails?.storeName,
|
|
154
|
+
address: storeDetails?.address || '',
|
|
155
|
+
count: log.totalCount,
|
|
156
|
+
file: file,
|
|
157
|
+
isDraft: userDetails[0].isDraft,
|
|
158
|
+
} );
|
|
159
|
+
break;
|
|
145
160
|
|
|
146
161
|
default:
|
|
147
162
|
msg = {
|
|
@@ -218,14 +233,25 @@ export async function getAuditFile( req, res ) {
|
|
|
218
233
|
auditId: reauditInsert._id,
|
|
219
234
|
},
|
|
220
235
|
};
|
|
221
|
-
|
|
222
|
-
// await savelogs( logData ); need to change
|
|
236
|
+
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
223
237
|
}
|
|
224
238
|
|
|
239
|
+
const storeQuery = {
|
|
240
|
+
storeId: msg.store_id,
|
|
241
|
+
};
|
|
242
|
+
const storeFields = {
|
|
243
|
+
storeId: 1,
|
|
244
|
+
storeName: 1,
|
|
245
|
+
address: '$storeProfile.address',
|
|
246
|
+
};
|
|
247
|
+
const storeInfo = await findOneStore( storeQuery, storeFields );
|
|
225
248
|
return res.sendSuccess(
|
|
226
249
|
{
|
|
227
250
|
result: reauditImg,
|
|
228
251
|
count: reauditImg.length,
|
|
252
|
+
storeId: storeInfo?.storeId,
|
|
253
|
+
storeName: storeInfo?.storeName,
|
|
254
|
+
address: storeInfo?.address || '',
|
|
229
255
|
file: {
|
|
230
256
|
store_id: msg.store_id,
|
|
231
257
|
file_date: msg.curr_date,
|
|
@@ -320,6 +346,14 @@ export async function getAuditFile( req, res ) {
|
|
|
320
346
|
return res.sendError( 'Bucket is Empty', 204 );
|
|
321
347
|
}
|
|
322
348
|
const userdata = await findOneUser( { _id: insertData.userId } );
|
|
349
|
+
const storeQuery = {
|
|
350
|
+
storeId: storeId,
|
|
351
|
+
};
|
|
352
|
+
const storeFields = {
|
|
353
|
+
storeName: 1,
|
|
354
|
+
address: '$storeProfile.address',
|
|
355
|
+
};
|
|
356
|
+
const storeInfo = await findOneStore( storeQuery, storeFields );
|
|
323
357
|
if ( inputData.nextId ) {
|
|
324
358
|
const logData = {
|
|
325
359
|
userId: insertData.userId,
|
|
@@ -334,13 +368,15 @@ export async function getAuditFile( req, res ) {
|
|
|
334
368
|
auditId: insertData._id,
|
|
335
369
|
},
|
|
336
370
|
};
|
|
337
|
-
|
|
338
|
-
// await savelogs( logData );
|
|
371
|
+
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
339
372
|
}
|
|
340
|
-
|
|
373
|
+
logger.info( { storeInfo: storeInfo } );
|
|
341
374
|
return res.sendSuccess( {
|
|
342
375
|
result: files,
|
|
343
376
|
count: msg.total_count,
|
|
377
|
+
storeId: storeId,
|
|
378
|
+
storeName: storeInfo?.storeName,
|
|
379
|
+
address: storeInfo?.address,
|
|
344
380
|
file: {
|
|
345
381
|
queueName: inputData.queueName,
|
|
346
382
|
store_id: storeId,
|
|
@@ -808,9 +844,8 @@ export async function saveDraft( req, res ) {
|
|
|
808
844
|
},
|
|
809
845
|
};
|
|
810
846
|
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
811
|
-
logger.info( { logData: logData } ); // need to insert to os
|
|
812
847
|
}
|
|
813
|
-
await
|
|
848
|
+
await createAuditLog( inputData );
|
|
814
849
|
await updateOneUserAudit( userQuery, userRecord );
|
|
815
850
|
await updateOneStoreAudit( storeQuery, storeRecord );
|
|
816
851
|
return res.sendSuccess( { result: 'The file has been drafted successfully' } );
|
|
@@ -823,46 +858,16 @@ export async function saveDraft( req, res ) {
|
|
|
823
858
|
|
|
824
859
|
export async function getDraftedData( req, res ) {
|
|
825
860
|
try {
|
|
826
|
-
const openSearch = JSON.parse( process.env.OPENSEARCH );
|
|
827
861
|
const inputData = req.query;
|
|
828
|
-
|
|
829
|
-
const
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
'bool': {
|
|
834
|
-
'must': [
|
|
835
|
-
{
|
|
836
|
-
'term': {
|
|
837
|
-
'fileDate.keyword': inputData.fileDate,
|
|
838
|
-
},
|
|
839
|
-
},
|
|
840
|
-
{
|
|
841
|
-
'term': {
|
|
842
|
-
'storeId.keyword': inputData.storeId,
|
|
843
|
-
},
|
|
844
|
-
},
|
|
845
|
-
{
|
|
846
|
-
'term': {
|
|
847
|
-
'userId.keyword': req.user._id,
|
|
848
|
-
},
|
|
849
|
-
},
|
|
850
|
-
|
|
851
|
-
],
|
|
852
|
-
|
|
853
|
-
},
|
|
854
|
-
},
|
|
862
|
+
const userId = inputData.userId || req.user._id;
|
|
863
|
+
const query={
|
|
864
|
+
fileDate: inputData.fileDate,
|
|
865
|
+
storeId: inputData.storeId,
|
|
866
|
+
userId: userId,
|
|
855
867
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
'timestamp': {
|
|
859
|
-
'order': 'desc',
|
|
860
|
-
},
|
|
861
|
-
},
|
|
862
|
-
],
|
|
868
|
+
};
|
|
869
|
+
const result = await findOneAuditLog( query, {}, { createdAt: -1 }, 1 );
|
|
863
870
|
|
|
864
|
-
} );
|
|
865
|
-
const result = getLog?.body?.hits?.hits;
|
|
866
871
|
if ( result.length ==0 ) {
|
|
867
872
|
return res.sendError( 'No Data Found', 500 );
|
|
868
873
|
}
|
package/src/dtos/audit.dtos.js
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import auditLogsModel from 'tango-api-schema/schema/auditLogs.model.js';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export function createAuditLog( record ) {
|
|
5
|
+
return auditLogsModel.create( record );
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function findOneAuditLog( query, fields={}, sort={ createdAt: -1 }, limit=10 ) {
|
|
9
|
+
return auditLogsModel.findOne( query, fields ).sort( sort ).limit( limit );
|
|
10
|
+
}
|