tango-app-api-audit 1.0.56 → 1.0.58

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.56",
3
+ "version": "1.0.58",
4
4
  "description": "audit & audit metrics apis",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -25,7 +25,7 @@
25
25
  "nodemon": "^3.1.3",
26
26
  "swagger-ui-express": "^5.0.1",
27
27
  "tango-api-schema": "^2.0.152",
28
- "tango-app-api-middleware": "^3.1.28",
28
+ "tango-app-api-middleware": "^3.1.30",
29
29
  "winston": "^3.13.0",
30
30
  "winston-daily-rotate-file": "^5.0.0"
31
31
  },
@@ -17,11 +17,12 @@ import {
17
17
  } from '../service/userAudit.service.js';
18
18
  import {
19
19
  aggregateAssignAudit,
20
+ createAssignAudit,
20
21
  updateOneAssignAudit,
21
22
  } from '../service/assignAudit.service.js';
22
23
  import { aggregateUser, findOneUser } from '../service/user.service.js';
23
24
  import dayjs from 'dayjs';
24
- import { aggregateClient, findClient } from '../service/client.service.js';
25
+ import { aggregateClient, findClient, findOneClient } from '../service/client.service.js';
25
26
  import { logger } from 'tango-app-api-middleware';
26
27
  import {
27
28
  listQueue,
@@ -532,7 +533,6 @@ export async function getAuditFile( req, res ) {
532
533
  queueName: inputData.queueName,
533
534
  beforeCount: msg.total_count || files.length,
534
535
  auditStatus: 'inprogress',
535
- moduleType: 'traffic',
536
536
  fileDateISO: start,
537
537
  timeSpent: 0,
538
538
  startTime: new Date(),
@@ -1207,8 +1207,22 @@ export async function save( req, res ) {
1207
1207
  try {
1208
1208
  const bucket = JSON.parse( process.env.BUCKET );
1209
1209
  const sqs = JSON.parse( process.env.SQS );
1210
-
1211
1210
  const inputData = req.body;
1211
+ let storeAuditData = await findOneStoreAudit( {
1212
+ storeId: inputData.storeId,
1213
+ fileDate: inputData.fileDate,
1214
+ moduleType: inputData.moduleType,
1215
+ zoneName: inputData.zoneName,
1216
+ auditType: inputData.auditType,
1217
+ } );
1218
+ logger.info( { storeAuditData: storeAuditData } );
1219
+ if ( storeAuditData==null ) {
1220
+ logger.error( {
1221
+ error: `No data found: ${inputData.storeId}/${inputData.zoneName}/${inputData.fileDate}/${bucket.masterJsonFile}`,
1222
+ type: 'DATABASE_RECORD_NOTFOUND',
1223
+ } );
1224
+ return res.sendError( storeAuditData, 204 );
1225
+ }
1212
1226
  const params = {
1213
1227
  Key: `${inputData.storeId}/${inputData.zoneName}/${inputData.fileDate}/${bucket.masterJsonFile}`,
1214
1228
  };
@@ -1300,13 +1314,6 @@ export async function save( req, res ) {
1300
1314
  clientId: 1,
1301
1315
  },
1302
1316
  );
1303
- let storeAuditData = await findOneStoreAudit( {
1304
- storeId: inputData.storeId,
1305
- fileDate: inputData.fileDate,
1306
- moduleType: inputData.moduleType,
1307
- zoneName: inputData.zoneName,
1308
- auditType: inputData.auditType,
1309
- } );
1310
1317
 
1311
1318
  let clientData = await findClient( { clientId: storeConfig.clientId } );
1312
1319
 
@@ -2698,6 +2705,152 @@ export async function overAllAuditSummary( req, res ) {
2698
2705
  }
2699
2706
  }
2700
2707
 
2708
+ export async function reTrigger( req, res ) {
2709
+ try {
2710
+ const openSearch = JSON.parse( process.env.OPENSEARCH );
2711
+ const inputData = req.body;
2712
+ const sqs = JSON.parse( process.env.SQS );
2713
+ const query ={
2714
+ storeId: inputData.storeId,
2715
+ fileDate: inputData.fileDate,
2716
+ zoneName: inputData.zoneName,
2717
+ };
2718
+ const getQueueName = await findOneClient( { clientId: req.audit.clientId }, { 'auditConfigs': 1 } );
2719
+ const queueName = inputData.moduleType == 'zone' ? getQueueName?.auditConfigs?.zoneQueueName : getQueueName?.auditConfigs?.trafficQueueName;
2720
+ if ( !getQueueName || queueName == '' ) {
2721
+ return res.sendError( 'queueName does not create', 400 );
2722
+ }
2723
+ switch ( inputData.triggerType ) {
2724
+ case 'queue':
2725
+ const msg = {
2726
+ store_id: inputData.storeId,
2727
+ zone_id: inputData.zoneName,
2728
+ curr_date: inputData.fileDate,
2729
+ audit_type: inputData.auditType,
2730
+ total_count: inputData.totalCount,
2731
+ };
2732
+
2733
+ const sqsProduceQueue = {
2734
+ QueueUrl: `${sqs.url}${queueName}`,
2735
+ MessageBody: JSON.stringify( msg ),
2736
+ };
2737
+ const sqsQueue = await sendMessageToQueue( sqsProduceQueue.QueueUrl, sqsProduceQueue.MessageBody );
2738
+ if ( sqsQueue?.errorCode ) {
2739
+ const error = sqsQueue?.errorMsg;
2740
+ const code = sqsQueue?.errorCode;
2741
+ return res.sendError( error, code );
2742
+ } else {
2743
+ if ( req.audit.status !== 'completed' ) {
2744
+ const userRecord ={
2745
+ auditStatus: 'skipped',
2746
+ isDraft: false,
2747
+ };
2748
+ const query ={
2749
+ storeId: inputData.storeId,
2750
+ zoneName: inputData.zoneName,
2751
+ fileDate: inputData.fileDate,
2752
+ auditStatus: req.audit.status,
2753
+
2754
+ };
2755
+ await updateOneUserAudit( query, userRecord );
2756
+ }
2757
+
2758
+ const storeRecord ={
2759
+ status: req.audit.status !== 'completed' ? 'skipped': 'not_assign',
2760
+ };
2761
+
2762
+ await updateOneStoreAudit( query, storeRecord );
2763
+ const logData = {
2764
+ userId: req.user._id,
2765
+ userName: req.user.userName,
2766
+ logType: 'audit',
2767
+ logSubType: 'reTrigger',
2768
+ logData: {
2769
+ beforeCount: inputData.totalCount,
2770
+ afterCount: '',
2771
+ fileDate: inputData.fileDate,
2772
+ auditType: inputData.auditType,
2773
+ storeId: inputData.storeId,
2774
+ zoneName: inputData.zoneName,
2775
+ moduleType: inputData.moduleType,
2776
+ queueName: queueName,
2777
+ message: inputData.comments,
2778
+ triggerBy: req.user.userName,
2779
+ triggerId: req.user._id,
2780
+ triggerType: inputData.triggerType,
2781
+ },
2782
+ };
2783
+ await insertOpenSearchData( openSearch.activityLog, logData );
2784
+ }
2785
+ break;
2786
+ case 'user':
2787
+ const assignUser = await findOneUser( { _id: new mongoose.Types.ObjectId( inputData.userId ) } );
2788
+ const assignUserRecord = {
2789
+ storeId: inputData.storeId,
2790
+ clientId: req.audit.clientId,
2791
+ zoneName: inputData.zoneName,
2792
+ fileDate: inputData.fileDate,
2793
+ moduleType: inputData.moduleType,
2794
+ fileDateISO: dayjs( new Date( ( inputData.fileDate ).split( '-' ).reverse().join( '-' ) ) ).format(),
2795
+ auditType: inputData.auditType,
2796
+ fileCount: inputData.beforeCount,
2797
+ queueName: queueName,
2798
+ userId: inputData.userId,
2799
+ userName: assignUser.userName,
2800
+ };
2801
+ await createAssignAudit( assignUserRecord );
2802
+
2803
+ if ( req.audit.status !== 'completed' ) {
2804
+ const userRecord ={
2805
+ auditStatus: 'skipped',
2806
+ isDraft: false,
2807
+ };
2808
+ const query ={
2809
+ storeId: inputData.storeId,
2810
+ zoneName: inputData.zoneName,
2811
+ fileDate: inputData.fileDate,
2812
+ auditStatus: req.audit.status,
2813
+
2814
+ };
2815
+ await updateOneUserAudit( query, userRecord );
2816
+ }
2817
+
2818
+ const storeRecord ={
2819
+ status: req.audit.status !== 'completed' ? 'skipped': 'assigned',
2820
+ };
2821
+
2822
+ await updateOneStoreAudit( query, storeRecord );
2823
+ const logData = {
2824
+ userId: req.user._id,
2825
+ userName: req.user.userName,
2826
+ logType: 'audit',
2827
+ logSubType: 'reTrigger',
2828
+ logData: {
2829
+ beforeCount: inputData.totalCount,
2830
+ afterCount: '',
2831
+ fileDate: inputData.fileDate,
2832
+ auditType: inputData.auditType,
2833
+ storeId: inputData.storeId,
2834
+ zoneName: inputData.zoneName,
2835
+ moduleType: inputData.moduleType,
2836
+ queueName: queueName,
2837
+ message: inputData.comments,
2838
+ triggerBy: req.user.userName,
2839
+ triggerId: req.user._id,
2840
+ triggerType: inputData.triggerType,
2841
+ },
2842
+ };
2843
+ await insertOpenSearchData( openSearch.activityLog, logData );
2844
+ }
2845
+
2846
+ return res.sendSuccess( { result: 'The File has been Re Trigger Succesfully' } );
2847
+ } catch ( error ) {
2848
+ const err = error.message;
2849
+ logger.error( { error: error, message: req.body } );
2850
+ return res.sendError( err, 500 );
2851
+ }
2852
+ }
2853
+
2701
2854
  export async function overViewCard( req, res ) {
2702
2855
  try {
2703
2856
  const inputData = req.body;
@@ -1,155 +1,9 @@
1
- import { insertOpenSearchData, logger, sendMessageToQueue } from 'tango-app-api-middleware';
2
- import { updateOneUserAudit } from '../service/userAudit.service.js';
3
- import mongoose from 'mongoose';
4
- import { updateOneStoreAudit } from '../service/storeAudit.service.js';
5
- import { findOneUser } from '../service/user.service.js';
6
- import dayjs from 'dayjs';
7
- import { createAssignAudit } from '../service/assignAudit.service.js';
8
- import { findOneClient } from '../service/client.service.js';
1
+ import { logger } from 'tango-app-api-middleware';
9
2
  import { getAuditFilterData, getAuditImageData, zipDownloadImage } from '../validation/audit.validation.js';
10
3
  import { getReauditImg } from './audit.controllers.js';
11
4
  // import { listQueue } from 'tango-app-api-middleware/src/utils/aws/sqs.js';
12
5
 
13
6
 
14
- export async function reTrigger( req, res ) {
15
- try {
16
- const openSearch = JSON.parse( process.env.OPENSEARCH );
17
- const inputData = req.body;
18
- const sqs = JSON.parse( process.env.SQS );
19
- const query ={
20
- storeId: inputData.storeId,
21
- fileDate: inputData.fileDate,
22
- };
23
- const getQueueName = await findOneClient( { clientId: req.audit.clientId }, { 'auditConfigs.queueName': 1 } );
24
-
25
- if ( !getQueueName || getQueueName?.auditConfigs?.queueName == '' ) {
26
- return res.sendError( 'queueName does not create', 400 );
27
- }
28
- const queueName = getQueueName?.auditConfigs?.queueName;
29
- logger.info( { queueName: queueName } );
30
- switch ( inputData.triggerType ) {
31
- case 'queue':
32
- const msg = {
33
- store_id: inputData.storeId,
34
- curr_date: inputData.fileDate,
35
- audit_type: inputData.type,
36
- total_count: inputData.totalCount,
37
- };
38
-
39
- const sqsProduceQueue = {
40
- QueueUrl: `${sqs.url}${queueName}`,
41
- MessageBody: JSON.stringify( msg ),
42
- };
43
- const sqsQueue = await sendMessageToQueue( sqsProduceQueue.QueueUrl, sqsProduceQueue.MessageBody );
44
- if ( sqsQueue?.errorCode ) {
45
- const error = sqsQueue?.errorMsg;
46
- const code = sqsQueue?.errorCode;
47
- return res.sendError( error, code );
48
- } else {
49
- if ( req.audit.status !== 'completed' ) {
50
- const userRecord ={
51
- auditStatus: 'skipped',
52
- isDraft: false,
53
- };
54
- const query ={
55
- storeId: inputData.storeId,
56
- fileDate: inputData.fileDate,
57
- auditStatus: req.audit.status,
58
-
59
- };
60
- await updateOneUserAudit( query, userRecord );
61
- }
62
-
63
- const storeRecord ={
64
- status: req.audit.status !== 'completed' ? 'skipped': 'not_assign',
65
- };
66
-
67
- await updateOneStoreAudit( query, storeRecord );
68
- const logData = {
69
- userId: req.user._id,
70
- userName: req.user.userName,
71
- logType: 'audit',
72
- logSubType: 'reTrigger',
73
- logData: {
74
- beforeCount: inputData.totalCount,
75
- afterCount: '',
76
- fileDate: inputData.fileDate,
77
- auditType: inputData.type,
78
- storeId: inputData.storeId,
79
- queueName: queueName,
80
- message: inputData.comments,
81
- triggerBy: req.user.userName,
82
- triggerId: req.user._id,
83
- triggerType: inputData.triggerType,
84
- },
85
- };
86
- await insertOpenSearchData( openSearch.activityLog, logData );
87
- }
88
- break;
89
- case 'user':
90
- const assignUser = await findOneUser( { _id: new mongoose.Types.ObjectId( inputData.userId ) } );
91
- const assignUserRecord = {
92
- storeId: inputData.storeId,
93
- clientId: req.audit.clientId,
94
- fileDate: inputData.fileDate,
95
- moduleType: 'traffic',
96
- fileDateISO: dayjs( inputData.fileDate, 'DD-MM-YYYY' ).format(),
97
- auditType: inputData.type,
98
- fileCount: inputData.beforeCount,
99
- queueName: queueName,
100
- userId: inputData.userId,
101
- userName: assignUser.userName,
102
- };
103
- await createAssignAudit( assignUserRecord );
104
-
105
- if ( req.audit.status !== 'completed' ) {
106
- const userRecord ={
107
- auditStatus: 'skipped',
108
- isDraft: false,
109
- };
110
- const query ={
111
- storeId: inputData.storeId,
112
- fileDate: inputData.fileDate,
113
- auditStatus: req.audit.status,
114
-
115
- };
116
- await updateOneUserAudit( query, userRecord );
117
- }
118
-
119
- const storeRecord ={
120
- status: req.audit.status !== 'completed' ? 'skipped': 'assigned',
121
- };
122
-
123
- await updateOneStoreAudit( query, storeRecord );
124
- const logData = {
125
- userId: req.user._id,
126
- userName: req.user.userName,
127
- logType: 'audit',
128
- logSubType: 'reTrigger',
129
- logData: {
130
- beforeCount: inputData.totalCount,
131
- afterCount: '',
132
- fileDate: inputData.fileDate,
133
- auditType: inputData.type,
134
- storeId: inputData.storeId,
135
- queueName: queueName,
136
- message: inputData.comments,
137
- triggerBy: req.user.userName,
138
- triggerId: req.user._id,
139
- triggerType: inputData.triggerType,
140
- },
141
- };
142
- await insertOpenSearchData( openSearch.activityLog, logData );
143
- }
144
-
145
- return res.sendSuccess( { result: 'The File has been Re Trigger Succesfully' } );
146
- } catch ( error ) {
147
- const err = error.message;
148
- logger.error( { error: error, message: req.body } );
149
- return res.sendError( err, 500 );
150
- }
151
- }
152
-
153
7
  export async function auditImages( req, res ) {
154
8
  try {
155
9
  const inputData = req.query;
@@ -1,4 +1,4 @@
1
- import { auditStoreSchema, clientMetricsSchema, clientSchema, getDraftedDataSchema, getFileSchema, overAllAuditSummarySchema, overViewCardSchema, overViewTableSchema, saveDraftSchema, saveSchema, storeMetricsSchema, summarySplitSchema, userAuditHistorySchema, userMetricsSchema, userSchema, workSpaceSchema } from '../dtos/audit.dtos.js';
1
+ import { auditStoreSchema, clientMetricsSchema, clientSchema, getDraftedDataSchema, getFileSchema, overAllAuditSummarySchema, overViewCardSchema, overViewTableSchema, reTriggerValidSchema, saveDraftSchema, saveSchema, storeMetricsSchema, summarySplitSchema, userAuditHistorySchema, userMetricsSchema, userSchema, workSpaceSchema, auditImageValidSchema } from '../dtos/audit.dtos.js';
2
2
  import j2s from 'joi-to-swagger';
3
3
 
4
4
  export const auditDocs = {
@@ -398,6 +398,29 @@ export const auditDocs = {
398
398
  },
399
399
  },
400
400
 
401
+ '/v3/audit/metrics/re-trigger': {
402
+ post: {
403
+ tags: [ 'Audit Metrics' ],
404
+ description: `Manual re trigger a file`,
405
+ operationId: 'metrics/re-trigger',
406
+ parameters: {},
407
+ requestBody: {
408
+ content: {
409
+ 'application/json': {
410
+ schema: j2s( reTriggerValidSchema ).swagger,
411
+ },
412
+ },
413
+ },
414
+ responses: {
415
+ 200: { description: 'Successful' },
416
+ 401: { description: 'Unauthorized User' },
417
+ 422: { description: 'Field Error' },
418
+ 500: { description: 'Server Error' },
419
+ 204: { description: 'Not Found' },
420
+ },
421
+ },
422
+ },
423
+
401
424
  '/v3/audit/metrics/overview-card': {
402
425
  post: {
403
426
  tags: [ 'Audit Metrics' ],
@@ -443,4 +466,58 @@ export const auditDocs = {
443
466
  },
444
467
  },
445
468
  },
469
+
470
+ '/v3/audit/audit-images': {
471
+ get: {
472
+ tags: [ 'Audit Metrics' ],
473
+ description: `View and Download audit images`,
474
+ operationId: 'audit-images',
475
+ parameters: [
476
+ {
477
+ in: 'query',
478
+ name: 'fileDate',
479
+ scema: j2s( auditImageValidSchema ).swagger,
480
+ require: true,
481
+ },
482
+ {
483
+ in: 'query',
484
+ name: 'storeId',
485
+ scema: j2s( auditImageValidSchema ).swagger,
486
+ require: true,
487
+ },
488
+ {
489
+ in: 'query',
490
+ name: 'imageType',
491
+ scema: j2s( auditImageValidSchema ).swagger,
492
+ require: true,
493
+ },
494
+ {
495
+ in: 'query',
496
+ name: 'export',
497
+ scema: j2s( auditImageValidSchema ).swagger,
498
+ require: true,
499
+ },
500
+ {
501
+ in: 'query',
502
+ name: 'moduleType',
503
+ scema: j2s( auditImageValidSchema ).swagger,
504
+ require: true,
505
+ },
506
+ {
507
+ in: 'query',
508
+ name: 'zoneName',
509
+ scema: j2s( auditImageValidSchema ).swagger,
510
+ require: true,
511
+ },
512
+ ],
513
+ responses: {
514
+ 200: { description: 'Successful' },
515
+ 401: { description: 'Unauthorized User' },
516
+ 422: { description: 'Field Error' },
517
+ 500: { description: 'Server Error' },
518
+ 204: { description: 'Not Found' },
519
+ },
520
+
521
+ },
522
+ },
446
523
  };
@@ -1,5 +1,5 @@
1
1
  import j2s from 'joi-to-swagger';
2
- import { auditImageValidSchema, getAuditImagesSchema, reTriggerValidSchema } from '../dtos/auditMetrics.dtos.js';
2
+ import { auditImageValidSchema, getAuditImagesSchema } from '../dtos/auditMetrics.dtos.js';
3
3
 
4
4
  export const auditMetricsDocs = {
5
5
 
@@ -27,28 +27,6 @@ export const auditMetricsDocs = {
27
27
  },
28
28
 
29
29
 
30
- '/v3/audit-metrics/re-trigger': {
31
- post: {
32
- tags: [ 'Audit Metrics' ],
33
- description: `Manual re trigger a file`,
34
- operationId: 're-trigger',
35
- parameters: {},
36
- requestBody: {
37
- content: {
38
- 'application/json': {
39
- schema: j2s( reTriggerValidSchema ).swagger,
40
- },
41
- },
42
- },
43
- responses: {
44
- 200: { description: 'Successful' },
45
- 401: { description: 'Unauthorized User' },
46
- 422: { description: 'Field Error' },
47
- 500: { description: 'Server Error' },
48
- 204: { description: 'Not Found' },
49
- },
50
- },
51
- },
52
30
  '/v3/audit-metrics/audit-images': {
53
31
  get: {
54
32
  tags: [ 'Audit Metrics' ],
@@ -261,6 +261,24 @@ export const overAllAuditSummaryValid = {
261
261
  body: overAllAuditSummarySchema,
262
262
  };
263
263
 
264
+ export const reTriggerValidSchema = joi.object(
265
+ {
266
+ fileDate: joi.string().required(),
267
+ storeId: joi.string().required(),
268
+ zoneName: joi.string().required(),
269
+ moduleType: joi.string().required(),
270
+ auditType: joi.string().required(),
271
+ triggerType: joi.string().optional(),
272
+ totalCount: joi.number().required(),
273
+ userId: joi.string().optional(),
274
+ comments: joi.string().optional().allow( '' ),
275
+ },
276
+ );
277
+
278
+ export const reTriggerValid = {
279
+ body: reTriggerValidSchema,
280
+ };
281
+
264
282
  export const overViewCardSchema = joi.object(
265
283
  {
266
284
  fromDate: joi.string().required(),
@@ -284,3 +302,19 @@ export const summarySplitSchema = joi.object(
284
302
  export const summarySplitValid = {
285
303
  body: summarySplitSchema,
286
304
  };
305
+
306
+
307
+ export const auditImageValidSchema = joi.object(
308
+ {
309
+ fileDate: joi.string().required(),
310
+ storeId: joi.string().required(),
311
+ imageType: joi.string().required(),
312
+ export: joi.boolean().required(),
313
+ moduleType: joi.string().required(),
314
+ zoneName: joi.string().required(),
315
+ },
316
+ );
317
+
318
+ export const auditImageValid = {
319
+ query: auditImageValidSchema,
320
+ };
@@ -14,22 +14,6 @@ export const getAuditImagesValid = {
14
14
  };
15
15
 
16
16
 
17
- export const reTriggerValidSchema = joi.object(
18
- {
19
- fileDate: joi.string().required(),
20
- storeId: joi.string().required(),
21
- type: joi.string().optional(),
22
- triggerType: joi.string().optional(),
23
- totalCount: joi.number().required(),
24
- userId: joi.string().optional(),
25
- comments: joi.string().optional().allow( '' ),
26
- },
27
- );
28
-
29
- export const reTriggerValid = {
30
- body: reTriggerValidSchema,
31
- };
32
-
33
17
  export const auditImageValidSchema = joi.object(
34
18
  {
35
19
  fileDate: joi.string().required(),
@@ -1,8 +1,9 @@
1
1
  import express from 'express';
2
- import { isExistsQueue, validateUserAudit } from '../validation/audit.validation.js';
2
+ import { isAuditDocumentExist, isAuditInputFolderExist, isExistsQueue, validateUserAudit } from '../validation/audit.validation.js';
3
3
  import { isAllowedSessionHandler, validate } from 'tango-app-api-middleware';
4
- import { auditStoreList, auditUserList, clientMetrics, clients, getAuditFile, getDraftedData, overAllAuditSummary, overViewCard, overViewTable, save, saveDraft, storeMetrics, summarySplit, userAuditHistory, userMetrics, workSpace } from '../controllers/audit.controllers.js';
5
- import { auditStoreValid, clientMetricsValid, clientValid, getDraftedDataValid, getFileValid, overAllAuditSummaryValid, overViewCardValid, overViewTableValid, saveDraftValid, saveValid, storeMetricsValid, summarySplitValid, userAuditHistoryValid, userMetricsValid, workSpaceValid } from '../dtos/audit.dtos.js';
4
+ import { auditStoreList, auditUserList, clientMetrics, clients, getAuditFile, getDraftedData, overAllAuditSummary, overViewCard, overViewTable, reTrigger, save, saveDraft, storeMetrics, summarySplit, userAuditHistory, userMetrics, workSpace } from '../controllers/audit.controllers.js';
5
+ import { auditStoreValid, clientMetricsValid, clientValid, getDraftedDataValid, getFileValid, overAllAuditSummaryValid, overViewCardValid, overViewTableValid, reTriggerValid, saveDraftValid, saveValid, storeMetricsValid, summarySplitValid, userAuditHistoryValid, userMetricsValid, workSpaceValid, auditImageValid } from '../dtos/audit.dtos.js';
6
+ import { auditImages } from '../controllers/auditMetrics.controllers.js';
6
7
 
7
8
  export const auditRouter = express.Router();
8
9
 
@@ -26,6 +27,8 @@ auditRouter.post( '/metrics/store-metrics', isAllowedSessionHandler, validate( s
26
27
  auditRouter.post( '/metrics/user-metrics', isAllowedSessionHandler, validate( userMetricsValid ), userMetrics );
27
28
  auditRouter.post( '/metrics/overview-table', isAllowedSessionHandler, validate( overViewTableValid ), overViewTable );
28
29
  auditRouter.post( '/metrics/overall-audit-summary', isAllowedSessionHandler, validate( overAllAuditSummaryValid ), overAllAuditSummary );
30
+ auditRouter.post( '/metrics/re-trigger', isAllowedSessionHandler, validate( reTriggerValid ), isAuditDocumentExist, isAuditInputFolderExist, reTrigger );
31
+ auditRouter.get( '/audit-images', isAllowedSessionHandler, validate( auditImageValid ), isAuditInputFolderExist, auditImages );
29
32
 
30
33
 
31
34
  // hold
@@ -1,14 +1,13 @@
1
1
 
2
2
  import express from 'express';
3
3
  import { isAllowedSessionHandler, validate } from 'tango-app-api-middleware';
4
- import { auditImages, reTrigger } from '../controllers/auditMetrics.controllers.js';
5
- import { auditImageValid, reTriggerValid, viewLogValid } from '../dtos/auditMetrics.dtos.js';
6
- import { isAuditDocumentExist, isAuditInputFolderExist } from '../validation/audit.validation.js';
4
+ import { auditImages } from '../controllers/auditMetrics.controllers.js';
5
+ import { auditImageValid, viewLogValid } from '../dtos/auditMetrics.dtos.js';
6
+ import { isAuditInputFolderExist } from '../validation/audit.validation.js';
7
7
 
8
8
  export const auditMetricsRouter = express.Router();
9
9
 
10
10
 
11
- auditMetricsRouter.post( '/re-trigger', isAllowedSessionHandler, validate( reTriggerValid ), isAuditDocumentExist, isAuditInputFolderExist, reTrigger );
12
11
  auditMetricsRouter.get( '/audit-images', isAllowedSessionHandler, validate( auditImageValid ), isAuditInputFolderExist, auditImages );
13
12
  auditMetricsRouter.post( '/view-log', isAllowedSessionHandler, validate( viewLogValid ), isAuditInputFolderExist, auditImages );
14
13
 
@@ -167,7 +167,7 @@ export async function isAuditInputFolderExist( req, res, next ) {
167
167
  const inputData = req.method === 'POST' ? req.body : req.query;
168
168
  const params={
169
169
  Bucket: bucket.auditInput,
170
- Key: `${inputData.fileDate}/${inputData.storeId}`,
170
+ Key: `${inputData.fileDate}/${inputData.storeId}/${inputData.zoneName}`,
171
171
  };
172
172
  const isExist = await checkFileExist( params );
173
173
  if ( isExist ) {
@@ -188,6 +188,8 @@ export async function isAuditDocumentExist( req, res, next ) {
188
188
  const query={
189
189
  storeId: inputData.storeId,
190
190
  fileDate: inputData.fileDate,
191
+ zoneName: inputData.zoneName,
192
+ moduleType: inputData.moduleType,
191
193
  };
192
194
  const auditInfo = await findOneStoreAudit( query );
193
195
  if ( auditInfo ) {
@@ -211,7 +213,7 @@ export async function getAuditImageData( data ) {
211
213
  const files = [];
212
214
  const fetchData = {
213
215
  Bucket: `${bucket.auditInput}`,
214
- filePath: `${fileDate}/${storeId}/`,
216
+ filePath: `${fileDate}/${storeId}/${data.zoneName}/`,
215
217
  };
216
218
  const folderPath = await listFileWithoutLimit( fetchData );
217
219
  if ( folderPath.statusCode == 404 ) {
@@ -223,7 +225,7 @@ export async function getAuditImageData( data ) {
223
225
  if ( auditImages && auditImages?.length > 0 ) {
224
226
  for ( let i = 0; i < auditImages.length; i++ ) {
225
227
  const img = auditImages[i].Key.split( '/' );
226
- const image = img[2].split( '.' );
228
+ const image = img[3].split( '.' );
227
229
  const indexes = image[0].split( '_' );
228
230
  const params = {
229
231
  file_path: auditImages[i].Key,
@@ -301,7 +303,7 @@ export async function getAuditFilterData( data ) {
301
303
  const fileDate = data.fileDate;
302
304
  const params = {
303
305
  Bucket: `${bucket.auditOutput}`,
304
- Key: `${storeId}/${fileDate}/${bucket.masterJsonFile}`,
306
+ Key: `${storeId}/${data.zoneName}/${fileDate}/${bucket.masterJsonFile}`,
305
307
  };
306
308
  const mappingFile = await getJsonFileData( params );
307
309
  if ( mappingFile.statusCode ) {