tango-app-api-audit 1.0.8 → 1.0.10
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
|
@@ -475,7 +475,7 @@ export async function workSpace( req, res ) {
|
|
|
475
475
|
},
|
|
476
476
|
];
|
|
477
477
|
|
|
478
|
-
if ( inputData.searchValue ) {
|
|
478
|
+
if ( inputData.searchValue&& inputData.searchValue!== '' ) {
|
|
479
479
|
clientQuery.push( {
|
|
480
480
|
$match: {
|
|
481
481
|
$or: [
|
|
@@ -696,17 +696,17 @@ export async function workSpace( req, res ) {
|
|
|
696
696
|
const CompletedCount = await aggregateStoreAudit( completedFiles );
|
|
697
697
|
|
|
698
698
|
const clientAssignresult = await aggregateAssignAudit( clientAssign );
|
|
699
|
-
|
|
700
699
|
const userAsignCount = await aggregateAssignAudit( userAsign );
|
|
701
700
|
const mergeAll = _.merge( _.keyBy( clientDetails, 'clientId' ), _.keyBy( auditCount, 'clientId' ), _.keyBy( draftedCount, 'clientId' ), _.keyBy( clientAssignresult, 'clientId' ) );
|
|
702
701
|
const finalResult = _.values( mergeAll );
|
|
703
702
|
const merge = _.values( _.merge( _.keyBy( finalResult, 'clientId' ), _.keyBy( auditDetails, 'clientId' ), _.keyBy( userAsignCount, 'clientId' ), _.keyBy( CompletedCount, 'clientId' ) ) );
|
|
704
|
-
|
|
703
|
+
logger.info( { merge: merge } );
|
|
705
704
|
let totalStores = 0;
|
|
706
705
|
for ( let i = 0; i < merge.length; i++ ) {
|
|
707
706
|
totalStores = totalStores + merge[i].totalFilesCount;
|
|
708
707
|
|
|
709
708
|
const pending = await listQueue( merge[i].queueName );
|
|
709
|
+
|
|
710
710
|
if ( !pending.statusCode ) {
|
|
711
711
|
temp.push( {
|
|
712
712
|
clientId: merge[i].clientId,
|
|
@@ -729,8 +729,8 @@ export async function workSpace( req, res ) {
|
|
|
729
729
|
const exportdata = [];
|
|
730
730
|
temp.forEach( ( element ) => {
|
|
731
731
|
exportdata.push( {
|
|
732
|
-
'Client Name': element.
|
|
733
|
-
'Client Id': element.
|
|
732
|
+
'Client Name': element.clientName,
|
|
733
|
+
'Client Id': element.clientId,
|
|
734
734
|
'Completed Percentage': element.completedRatio + ' %',
|
|
735
735
|
'Pending Queue': element.pendingByQueue,
|
|
736
736
|
'Pending User': element.pendingByUser,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { download, getUTC, logger } from 'tango-app-api-middleware';
|
|
2
2
|
import { aggregateAuditClientData } from '../service/auditClientData.service.js';
|
|
3
|
+
import { aggregateUserAudit } from '../service/userAudit.service.js';
|
|
4
|
+
import mongoose from 'mongoose';
|
|
3
5
|
// import { listQueue } from 'tango-app-api-middleware/src/utils/aws/sqs.js';
|
|
4
6
|
|
|
5
7
|
|
|
@@ -15,13 +17,98 @@ export async function getAuditImageList( req, res ) {
|
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
export async function userAuditHistory( req, res ) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
try {
|
|
21
|
+
const inputData = req.body;
|
|
22
|
+
const userId = inputData.userId || req.user._id;
|
|
23
|
+
const limit = inputData.limit || 10;
|
|
24
|
+
const offset = inputData.offset ? ( inputData.offset - 1 ) * limit : 0;
|
|
25
|
+
const dateRange = await getUTC( new Date( inputData.fromDate ), new Date( inputData.toDate ) );
|
|
26
|
+
let filter = [
|
|
27
|
+
|
|
28
|
+
{ userId: { $eq: new mongoose.Types.ObjectId( userId ) } },
|
|
29
|
+
|
|
30
|
+
];
|
|
31
|
+
if ( inputData.fileType == 'fileDate' ) {
|
|
32
|
+
filter.push(
|
|
33
|
+
{ fileDateISO: { $gte: dateRange.start } },
|
|
34
|
+
{ fileDateISO: { $lte: dateRange.end } },
|
|
35
|
+
);
|
|
36
|
+
} else {
|
|
37
|
+
filter.push(
|
|
38
|
+
{ createdAt: { $gte: dateRange.start } },
|
|
39
|
+
{ createdAt: { $lte: dateRange.end } },
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const query = [
|
|
44
|
+
{
|
|
45
|
+
$match: {
|
|
46
|
+
$and: filter,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
if ( inputData.searchValue && inputData.searchValue!== '' ) {
|
|
52
|
+
query.push( {
|
|
53
|
+
$match: {
|
|
54
|
+
$or: [
|
|
55
|
+
{ clientId: { $regex: inputData.searchValue, $options: 'i' } },
|
|
56
|
+
{ clientName: { $regex: inputData.searchValue, $options: 'i' } },
|
|
57
|
+
],
|
|
58
|
+
|
|
59
|
+
},
|
|
60
|
+
} );
|
|
61
|
+
}
|
|
62
|
+
if ( inputData.sortColumnName ) {
|
|
63
|
+
const sortBy = inputData.sortBy || -1;
|
|
64
|
+
query.push( {
|
|
65
|
+
$sort: { [inputData.sortColumName]: sortBy },
|
|
66
|
+
},
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
query.push( {
|
|
71
|
+
$project: {
|
|
72
|
+
storeId: 1,
|
|
73
|
+
storeName: '$storeId',
|
|
74
|
+
auditType: 1,
|
|
75
|
+
beforeCount: 1,
|
|
76
|
+
afterCount: 1,
|
|
77
|
+
accuracy: { $round: [
|
|
78
|
+
{
|
|
79
|
+
$divide: [ { $multiply: [ '$beforeCount', { $ifNull: [ '$afterCount', 0 ] } ] }, 100 ],
|
|
80
|
+
}, 2,
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
startTime: 1,
|
|
84
|
+
endTime: 1,
|
|
85
|
+
timeSpent: { $round: [
|
|
86
|
+
{ $divide: [ '$timeSpent', 60 ] }, 2,
|
|
87
|
+
] },
|
|
88
|
+
auditStatus: 1,
|
|
89
|
+
createdAt: 1,
|
|
90
|
+
},
|
|
91
|
+
} );
|
|
92
|
+
|
|
93
|
+
const count = await aggregateUserAudit( query );
|
|
94
|
+
if ( count.length == 0 ) {
|
|
95
|
+
return res.sendError( 'No Data Found', 204 );
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
query.push( {
|
|
99
|
+
$skip: offset,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
$limit: limit,
|
|
103
|
+
} );
|
|
104
|
+
const result = await aggregateUserAudit( query );
|
|
105
|
+
|
|
106
|
+
return res.sendSuccess( { result: result } );
|
|
107
|
+
} catch ( error ) {
|
|
108
|
+
const err = error.message || 'Internal Server Error';
|
|
109
|
+
logger.info( { error: error, message: req.body, function: 'userAuditHistory' } );
|
|
110
|
+
return res.sendError( err, 500 );
|
|
111
|
+
}
|
|
25
112
|
}
|
|
26
113
|
|
|
27
114
|
export async function storeMetrics( req, res ) {
|
|
@@ -347,7 +434,7 @@ export async function clientMetrics( req, res ) {
|
|
|
347
434
|
},
|
|
348
435
|
},
|
|
349
436
|
];
|
|
350
|
-
if ( inputData.searchValue ) {
|
|
437
|
+
if ( inputData.searchValue && inputData.searchValue!== '' ) {
|
|
351
438
|
query.push( {
|
|
352
439
|
$match: {
|
|
353
440
|
$or: [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import j2s from 'joi-to-swagger';
|
|
2
|
-
import { clientMetricsSchema, getAuditImagesSchema } from '../dtos/auditMetrics.dtos.js';
|
|
2
|
+
import { clientMetricsSchema, getAuditImagesSchema, userAuditHistorySchema } from '../dtos/auditMetrics.dtos.js';
|
|
3
3
|
|
|
4
4
|
export const auditMetricsDocs = {
|
|
5
5
|
|
|
@@ -47,4 +47,26 @@ export const auditMetricsDocs = {
|
|
|
47
47
|
},
|
|
48
48
|
},
|
|
49
49
|
},
|
|
50
|
+
'/v3/audit-metrics/user-audit-history': {
|
|
51
|
+
post: {
|
|
52
|
+
tags: [ 'Audit Metrics' ],
|
|
53
|
+
description: `Get list of user wise audit user details with date range`,
|
|
54
|
+
operationId: 'user-audit-history',
|
|
55
|
+
parameters: {},
|
|
56
|
+
requestBody: {
|
|
57
|
+
content: {
|
|
58
|
+
'application/json': {
|
|
59
|
+
schema: j2s( userAuditHistorySchema ).swagger,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
responses: {
|
|
64
|
+
200: { description: 'Successful' },
|
|
65
|
+
401: { description: 'Unauthorized User' },
|
|
66
|
+
422: { description: 'Field Error' },
|
|
67
|
+
500: { description: 'Server Error' },
|
|
68
|
+
204: { description: 'Not Found' },
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
50
72
|
};
|
package/src/dtos/audit.dtos.js
CHANGED
|
@@ -62,7 +62,7 @@ export const saveValid = {
|
|
|
62
62
|
|
|
63
63
|
export const workSpaceSchema = joi.object(
|
|
64
64
|
{
|
|
65
|
-
searchValue: joi.string().optional(),
|
|
65
|
+
searchValue: joi.string().optional().allow( '' ),
|
|
66
66
|
offset: joi.string().optional(),
|
|
67
67
|
limit: joi.number().optional(),
|
|
68
68
|
isExport: joi.boolean().optional(),
|
|
@@ -15,12 +15,20 @@ export const getAuditImagesValid = {
|
|
|
15
15
|
|
|
16
16
|
export const userAuditHistorySchema = joi.object(
|
|
17
17
|
{
|
|
18
|
-
|
|
18
|
+
userId: joi.string().optional(),
|
|
19
|
+
fromDate: joi.string().required(),
|
|
19
20
|
toDate: joi.string().required(),
|
|
20
|
-
storeId: joi.string().required(),
|
|
21
|
-
fileDate: joi.string().required(),
|
|
22
21
|
fileType: joi.string().required(),
|
|
23
|
-
|
|
22
|
+
filterByStoreId: joi.array().required(),
|
|
23
|
+
filterByType: joi.array().optional(),
|
|
24
|
+
filterByStatus: joi.array().optional(),
|
|
25
|
+
searchValue: joi.string().optional().allow( '' ),
|
|
26
|
+
limit: joi.number().optional(),
|
|
27
|
+
offset: joi.number().optional(),
|
|
28
|
+
sortColumnName: joi.string().optional(),
|
|
29
|
+
sortBy: joi.number().optional(),
|
|
30
|
+
isExport: joi.boolean().optional(),
|
|
31
|
+
|
|
24
32
|
},
|
|
25
33
|
);
|
|
26
34
|
|
|
@@ -45,7 +53,7 @@ export const clientMetricsSchema = joi.object(
|
|
|
45
53
|
{
|
|
46
54
|
fromDate: joi.string().required(),
|
|
47
55
|
toDate: joi.string().required(),
|
|
48
|
-
searchValue: joi.string().optional(),
|
|
56
|
+
searchValue: joi.string().optional().allow( '' ),
|
|
49
57
|
filterByClient: joi.array().required(),
|
|
50
58
|
filterByStatus: joi.array().optional(),
|
|
51
59
|
sortColumnName: joi.string().optional(),
|