tango-app-api-audit 1.0.55 → 1.0.57
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 +2 -2
- package/package.json +1 -1
- package/src/controllers/audit.controllers.js +148 -1
- package/src/controllers/auditMetrics.controllers.js +1 -147
- package/src/docs/audit.docs.js +24 -1
- package/src/docs/auditMetrics.docs.js +1 -23
- package/src/dtos/audit.dtos.js +18 -0
- package/src/dtos/auditMetrics.dtos.js +0 -16
- package/src/routes/audit.routes.js +4 -3
- package/src/routes/auditMetrics.routes.js +3 -4
- package/src/validation/audit.validation.js +3 -1
package/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
import { auditRouter } from './src/routes/audit.routes.js';
|
|
4
|
-
import {
|
|
4
|
+
import { auditDocs } from './src/docs/audit.docs.js';
|
|
5
5
|
|
|
6
|
-
export { auditRouter,
|
|
6
|
+
export { auditRouter, auditDocs };
|
|
7
7
|
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -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,
|
|
@@ -2698,6 +2699,152 @@ export async function overAllAuditSummary( req, res ) {
|
|
|
2698
2699
|
}
|
|
2699
2700
|
}
|
|
2700
2701
|
|
|
2702
|
+
export async function reTrigger( req, res ) {
|
|
2703
|
+
try {
|
|
2704
|
+
const openSearch = JSON.parse( process.env.OPENSEARCH );
|
|
2705
|
+
const inputData = req.body;
|
|
2706
|
+
const sqs = JSON.parse( process.env.SQS );
|
|
2707
|
+
const query ={
|
|
2708
|
+
storeId: inputData.storeId,
|
|
2709
|
+
fileDate: inputData.fileDate,
|
|
2710
|
+
zoneName: inputData.zoneName,
|
|
2711
|
+
};
|
|
2712
|
+
const getQueueName = await findOneClient( { clientId: req.audit.clientId }, { 'auditConfigs': 1 } );
|
|
2713
|
+
const queueName = inputData.moduleType == 'zone' ? getQueueName?.auditConfigs?.zoneQueueName : getQueueName?.auditConfigs?.trafficQueueName;
|
|
2714
|
+
if ( !getQueueName || queueName == '' ) {
|
|
2715
|
+
return res.sendError( 'queueName does not create', 400 );
|
|
2716
|
+
}
|
|
2717
|
+
switch ( inputData.triggerType ) {
|
|
2718
|
+
case 'queue':
|
|
2719
|
+
const msg = {
|
|
2720
|
+
store_id: inputData.storeId,
|
|
2721
|
+
zone_id: inputData.zoneName,
|
|
2722
|
+
curr_date: inputData.fileDate,
|
|
2723
|
+
audit_type: inputData.auditType,
|
|
2724
|
+
total_count: inputData.totalCount,
|
|
2725
|
+
};
|
|
2726
|
+
|
|
2727
|
+
const sqsProduceQueue = {
|
|
2728
|
+
QueueUrl: `${sqs.url}${queueName}`,
|
|
2729
|
+
MessageBody: JSON.stringify( msg ),
|
|
2730
|
+
};
|
|
2731
|
+
const sqsQueue = await sendMessageToQueue( sqsProduceQueue.QueueUrl, sqsProduceQueue.MessageBody );
|
|
2732
|
+
if ( sqsQueue?.errorCode ) {
|
|
2733
|
+
const error = sqsQueue?.errorMsg;
|
|
2734
|
+
const code = sqsQueue?.errorCode;
|
|
2735
|
+
return res.sendError( error, code );
|
|
2736
|
+
} else {
|
|
2737
|
+
if ( req.audit.status !== 'completed' ) {
|
|
2738
|
+
const userRecord ={
|
|
2739
|
+
auditStatus: 'skipped',
|
|
2740
|
+
isDraft: false,
|
|
2741
|
+
};
|
|
2742
|
+
const query ={
|
|
2743
|
+
storeId: inputData.storeId,
|
|
2744
|
+
zoneName: inputData.zoneName,
|
|
2745
|
+
fileDate: inputData.fileDate,
|
|
2746
|
+
auditStatus: req.audit.status,
|
|
2747
|
+
|
|
2748
|
+
};
|
|
2749
|
+
await updateOneUserAudit( query, userRecord );
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
const storeRecord ={
|
|
2753
|
+
status: req.audit.status !== 'completed' ? 'skipped': 'not_assign',
|
|
2754
|
+
};
|
|
2755
|
+
|
|
2756
|
+
await updateOneStoreAudit( query, storeRecord );
|
|
2757
|
+
const logData = {
|
|
2758
|
+
userId: req.user._id,
|
|
2759
|
+
userName: req.user.userName,
|
|
2760
|
+
logType: 'audit',
|
|
2761
|
+
logSubType: 'reTrigger',
|
|
2762
|
+
logData: {
|
|
2763
|
+
beforeCount: inputData.totalCount,
|
|
2764
|
+
afterCount: '',
|
|
2765
|
+
fileDate: inputData.fileDate,
|
|
2766
|
+
auditType: inputData.auditType,
|
|
2767
|
+
storeId: inputData.storeId,
|
|
2768
|
+
zoneName: inputData.zoneName,
|
|
2769
|
+
moduleType: inputData.moduleType,
|
|
2770
|
+
queueName: queueName,
|
|
2771
|
+
message: inputData.comments,
|
|
2772
|
+
triggerBy: req.user.userName,
|
|
2773
|
+
triggerId: req.user._id,
|
|
2774
|
+
triggerType: inputData.triggerType,
|
|
2775
|
+
},
|
|
2776
|
+
};
|
|
2777
|
+
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
2778
|
+
}
|
|
2779
|
+
break;
|
|
2780
|
+
case 'user':
|
|
2781
|
+
const assignUser = await findOneUser( { _id: new mongoose.Types.ObjectId( inputData.userId ) } );
|
|
2782
|
+
const assignUserRecord = {
|
|
2783
|
+
storeId: inputData.storeId,
|
|
2784
|
+
clientId: req.audit.clientId,
|
|
2785
|
+
zoneName: inputData.zoneName,
|
|
2786
|
+
fileDate: inputData.fileDate,
|
|
2787
|
+
moduleType: inputData.moduleType,
|
|
2788
|
+
fileDateISO: dayjs( new Date( ( inputData.fileDate ).split( '-' ).reverse().join( '-' ) ) ).format(),
|
|
2789
|
+
auditType: inputData.auditType,
|
|
2790
|
+
fileCount: inputData.beforeCount,
|
|
2791
|
+
queueName: queueName,
|
|
2792
|
+
userId: inputData.userId,
|
|
2793
|
+
userName: assignUser.userName,
|
|
2794
|
+
};
|
|
2795
|
+
await createAssignAudit( assignUserRecord );
|
|
2796
|
+
|
|
2797
|
+
if ( req.audit.status !== 'completed' ) {
|
|
2798
|
+
const userRecord ={
|
|
2799
|
+
auditStatus: 'skipped',
|
|
2800
|
+
isDraft: false,
|
|
2801
|
+
};
|
|
2802
|
+
const query ={
|
|
2803
|
+
storeId: inputData.storeId,
|
|
2804
|
+
zoneName: inputData.zoneName,
|
|
2805
|
+
fileDate: inputData.fileDate,
|
|
2806
|
+
auditStatus: req.audit.status,
|
|
2807
|
+
|
|
2808
|
+
};
|
|
2809
|
+
await updateOneUserAudit( query, userRecord );
|
|
2810
|
+
}
|
|
2811
|
+
|
|
2812
|
+
const storeRecord ={
|
|
2813
|
+
status: req.audit.status !== 'completed' ? 'skipped': 'assigned',
|
|
2814
|
+
};
|
|
2815
|
+
|
|
2816
|
+
await updateOneStoreAudit( query, storeRecord );
|
|
2817
|
+
const logData = {
|
|
2818
|
+
userId: req.user._id,
|
|
2819
|
+
userName: req.user.userName,
|
|
2820
|
+
logType: 'audit',
|
|
2821
|
+
logSubType: 'reTrigger',
|
|
2822
|
+
logData: {
|
|
2823
|
+
beforeCount: inputData.totalCount,
|
|
2824
|
+
afterCount: '',
|
|
2825
|
+
fileDate: inputData.fileDate,
|
|
2826
|
+
auditType: inputData.auditType,
|
|
2827
|
+
storeId: inputData.storeId,
|
|
2828
|
+
zoneName: inputData.zoneName,
|
|
2829
|
+
moduleType: inputData.moduleType,
|
|
2830
|
+
queueName: queueName,
|
|
2831
|
+
message: inputData.comments,
|
|
2832
|
+
triggerBy: req.user.userName,
|
|
2833
|
+
triggerId: req.user._id,
|
|
2834
|
+
triggerType: inputData.triggerType,
|
|
2835
|
+
},
|
|
2836
|
+
};
|
|
2837
|
+
await insertOpenSearchData( openSearch.activityLog, logData );
|
|
2838
|
+
}
|
|
2839
|
+
|
|
2840
|
+
return res.sendSuccess( { result: 'The File has been Re Trigger Succesfully' } );
|
|
2841
|
+
} catch ( error ) {
|
|
2842
|
+
const err = error.message;
|
|
2843
|
+
logger.error( { error: error, message: req.body } );
|
|
2844
|
+
return res.sendError( err, 500 );
|
|
2845
|
+
}
|
|
2846
|
+
}
|
|
2847
|
+
|
|
2701
2848
|
export async function overViewCard( req, res ) {
|
|
2702
2849
|
try {
|
|
2703
2850
|
const inputData = req.body;
|
|
@@ -1,155 +1,9 @@
|
|
|
1
|
-
import {
|
|
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;
|
package/src/docs/audit.docs.js
CHANGED
|
@@ -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 } 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' ],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import j2s from 'joi-to-swagger';
|
|
2
|
-
import { auditImageValidSchema, getAuditImagesSchema
|
|
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' ],
|
package/src/dtos/audit.dtos.js
CHANGED
|
@@ -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(),
|
|
@@ -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,8 @@
|
|
|
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 } from '../dtos/audit.dtos.js';
|
|
6
6
|
|
|
7
7
|
export const auditRouter = express.Router();
|
|
8
8
|
|
|
@@ -26,6 +26,7 @@ auditRouter.post( '/metrics/store-metrics', isAllowedSessionHandler, validate( s
|
|
|
26
26
|
auditRouter.post( '/metrics/user-metrics', isAllowedSessionHandler, validate( userMetricsValid ), userMetrics );
|
|
27
27
|
auditRouter.post( '/metrics/overview-table', isAllowedSessionHandler, validate( overViewTableValid ), overViewTable );
|
|
28
28
|
auditRouter.post( '/metrics/overall-audit-summary', isAllowedSessionHandler, validate( overAllAuditSummaryValid ), overAllAuditSummary );
|
|
29
|
+
auditRouter.post( '/metrics/re-trigger', isAllowedSessionHandler, validate( reTriggerValid ), isAuditDocumentExist, isAuditInputFolderExist, reTrigger );
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
// 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
|
|
5
|
-
import { auditImageValid,
|
|
6
|
-
import {
|
|
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 ) {
|