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.11",
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.117",
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, getOpenSearchData, getUTC, insertOpenSearchData, listFileByPath, listFileWithoutLimit, signedUrl } from 'tango-app-api-middleware';
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
- // case 'drafted':
88
- // logger.info( 'userDetails drafted', { inputData } );
89
- // const log = await findOneUser( {
90
- // userId: userDetails[0].userId,
91
- // fileDate: userDetails[0].fileDate,
92
- // storeId: userDetails[0].storeId,
93
- // totalCount: userDetails[0].beforeCount,
94
- // }, {}, { createdAt: -1 } );
95
- // if ( log.length == 0 ) {
96
- // await audit.updateOne( { _id: userDetails[0]._id }, { $set: { isDraft: false, auditStatus: 'skipped' } } );
97
- // logger.info( 'audit update in drafted', { _id: userDetails[0]._id, isDraft: false, auditStatus: 'skipped' } );
98
- // return res.sendError( 'User saved data has been deleted', 204 );
99
- // }
100
- // const file = {
101
- // auditId: userDetails[0]._id,
102
- // store_id: userDetails[0].storeId,
103
- // file_date: userDetails[0].fileDate,
104
- // type: userDetails[0].auditType,
105
- // queueName: log[0].queueName,
106
- // userId: log[0].userId,
107
- // };
108
- // const result = {
109
- // junk: log[0].junk,
110
- // junk_count: log[0].junkCount,
111
- // employee: log[0].employee,
112
- // employee_count: log[0].employeeCount,
113
- // customer: log[0].customer,
114
- // customer_count: log[0].customerCount,
115
- // retag_image: log[0].retagImage,
116
- // retag_count: log[0].retagCount,
117
- // total_count: log[0].totalCount,
118
- // };
119
-
120
- // const userdata = await findOneUser( { _id: log[0].userId } );
121
- // if ( !inputData.nextId || inputData.nextId === '' || inputData.nextId == null ) {
122
- // const logData = {
123
- // userId: log[0].userId,
124
- // userName: userdata.name,
125
- // logType: 'audit',
126
- // logSubType: 'auditStart',
127
- // logData: {
128
- // file_date: userDetails[0].fileDate,
129
- // auditType: userDetails[0].auditType,
130
- // storeId: userDetails[0].storeId,
131
- // clientName: log[0].queueName,
132
- // auditId: userDetails[0]._id ,
133
- // },
134
- // };
135
- // logger.info( { logData: logData } );
136
- // // await savelogs( logData ); Note : insert to os
137
- // }
138
- // return res.sendSuccess( {
139
- // result: result,
140
- // count: log[0].totalCount,
141
- // file: file,
142
- // isDraft: userDetails[0].isDraft,
143
- // } );
144
- // break;
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
- logger.info( { logData: logData } );
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
- logger.info( logData );
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 insertOpenSearchData( openSearch.auditLog, inputData );
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
- logger.info( { inputData: inputData } );
829
- const getLog = await getOpenSearchData( openSearch.auditLog,
830
- {
831
- 'size': 1,
832
- 'query': {
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
- 'sort': [
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
  }
@@ -41,6 +41,7 @@ export const getDraftedDataSchema = joi.object(
41
41
  {
42
42
  storeId: joi.string().required(),
43
43
  fileDate: joi.string().required(),
44
+ userId: joi.string().optional(),
44
45
  },
45
46
  );
46
47
 
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ import storeModel from 'tango-api-schema/schema/store.model.js';
2
+
3
+
4
+ export function findOneStore( query, fields ) {
5
+ return storeModel.findOne( query, fields );
6
+ }