tango-app-api-trax 3.4.1-beta-2 → 3.5.0-ai-2

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 CHANGED
@@ -8,5 +8,6 @@ import { downloadRouter } from './src/routes/download.router.js';
8
8
  import { mobileRouter } from './src/routes/mobileTrax.routes.js';
9
9
  import { internalTraxRouter } from './src/routes/internalTraxApi.router.js';
10
10
  import { locusOrderRouter } from './src/routes/locus.router.js';
11
+ import { traxActivityLogRouter } from './src/routes/activityLog.router.js';
11
12
 
12
- export { traxDashboardRouter, traxFlagRouter, traxRouter, galleryRouter, downloadRouter, mobileRouter, internalTraxRouter, locusOrderRouter };
13
+ export { traxDashboardRouter, traxFlagRouter, traxRouter, galleryRouter, downloadRouter, mobileRouter, internalTraxRouter, locusOrderRouter, traxActivityLogRouter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tango-app-api-trax",
3
- "version": "3.4.1-beta-2",
3
+ "version": "3.5.0-ai-2",
4
4
  "description": "Trax",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -26,8 +26,8 @@
26
26
  "mongodb": "^6.8.0",
27
27
  "nodemon": "^3.1.4",
28
28
  "path": "^0.12.7",
29
- "tango-api-schema": "^2.2.101",
30
- "tango-app-api-middleware": "^3.1.72",
29
+ "tango-api-schema": "^2.2.123",
30
+ "tango-app-api-middleware": "^3.1.77",
31
31
  "url": "^0.11.4",
32
32
  "winston": "^3.13.1",
33
33
  "winston-daily-rotate-file": "^5.0.0"
@@ -0,0 +1,294 @@
1
+ // import mongoose from 'mongoose';
2
+ import { insertOpenSearchData, updateOpenSearchData, getOpenSearchData } from 'tango-app-api-middleware';
3
+ import * as checklistService from '../services/checklist.service.js';
4
+ import * as taskconfigService from '../services/taskConfig.service.js';
5
+
6
+ export const insertLog = async ( req, res ) => {
7
+ try {
8
+ // let currentDate = new Date();
9
+ // let inserttraxlogs = {
10
+ // 'client_id': '11',
11
+ // 'createAt': new Date(),
12
+ // 'sourceCheckList_id': '668e3e1807d5312fa49b0046',
13
+ // 'checkListName': 'Daily Store Checklistnafi33',
14
+ // 'fromCheckListName': '',
15
+ // 'type': 'checklist',
16
+ // 'action': 'updated',
17
+ // 'storeName': 'LKST007',
18
+ // 'store_id': '',
19
+ // 'createdByEmail': 'lkst007bc1@lenskart.co.in',
20
+ // 'createdBy': 'lkst007bc1',
21
+ // 'coverage': 'store',
22
+ // 'logDetails': {
23
+ // 'schedule': {
24
+ // 'previous': {
25
+ // 'schedule': 'repeats',
26
+ // // "repeats":"daily",
27
+ // 'time': '10:00 AM to 11:00 PM',
28
+ // // "occurs":[],
29
+ // 'scheduleRepeatedDay': [ '01' ],
30
+ // 'scheduleRepeatedType': 'daily',
31
+ // 'scheduleStartTime_iso': '2025-02-10T23:30:00.000+00:00',
32
+ // 'scheduleEndTime_iso': '2025-02-10T23:30:00.000+00:00',
33
+ // 'configStartDate': '2025-03-11T00:00:00.000+00:00',
34
+ // 'configEndDate': '2025-03-12T00:00:00.000+00:00',
35
+ // 'scheduleWeekDays': [ 'Monday', 'Tuesday' ],
36
+ // 'scheduleRepeatedMonthWeek': '2 Tuesday',
37
+ // 'specificDate': [ '10', '11' ],
38
+
39
+ // },
40
+ // 'new': {
41
+ // 'schedule': 'onetime',
42
+ // // "repeats":"weekly",
43
+ // 'time': '10:00 AM to 11:00 PM',
44
+ // // "occurs":["Mondy","Tuesday"],
45
+ // 'scheduleRepeatedDay': [ '01' ],
46
+ // 'scheduleRepeatedType': 'daily',
47
+ // 'configStartDate': '2025-03-11T00:00:00.000+00:00',
48
+ // 'configEndDate': '2025-03-12T00:00:00.000+00:00',
49
+ // 'scheduleStartTime_iso': '2025-02-10T23:30:00.000+00:00',
50
+ // 'scheduleEndTime_iso': '2025-02-10T23:30:00.000+00:00',
51
+ // 'scheduleWeekDays': [ 'Monday', 'Tuesday' ],
52
+ // 'scheduleRepeatedMonthWeek': '2 Tuesday',
53
+ // 'specificDate': [ '10', '11' ],
54
+ // },
55
+ // },
56
+ // 'response': {
57
+ // 'previous': [ 'Geo Facing', 'Allow Multiple response' ],
58
+ // 'new': [ 'Geo Facing 2', 'Allow Multiple response 2' ],
59
+ // },
60
+ // 'owner': {
61
+ // 'previous': [ 'Ajinkya Malshe' ],
62
+ // 'new': [ 'Ajinkya Malshe' ],
63
+ // },
64
+ // 'approver': {
65
+ // 'previous': [ 'raju', 'rajuapprover' ],
66
+ // 'new': [ 'raju 1', 'rajuapprover 2' ],
67
+ // },
68
+ // 'storeAdded': [ 'LKST011', 'LKST022', 'LKST3444', 'LKST455', 'LKST566', 'LKST666', 'LKST766', 'LKST866', 'LkST966' ],
69
+ // 'storeRemoved': [ 'LKST1166', 'LKST1177', 'LKST1188', 'LKST1199', 'LKST1155', 'LKST1144', 'LKST1133', 'LKST1122', 'LkST1111' ],
70
+ // 'userAdded': [ 'LKST011@yopmail.com', 'LKST022@yopmail.com', 'LKST3444@yopmail.com', 'LKST455@yopmail.com', 'LKST566@yopmail.com', 'LKST666@yopmail.com', 'LKST766@yopmail.com', 'LKST866@yopmail.com', 'LkST966@yopmail.com' ],
71
+ // 'userRemoved': [ 'LKST1166@yopmail.com', 'LKST1177@yopmail.com', 'LKST1188@yopmail.com', 'LKST1199@yopmail.com', 'LKST1155@yopmail.com', 'LKST1144@yopmail.com', 'LKST1133@yopmail.com', 'LKST1122@yopmail.com', 'LkST1111@yopmail.com' ],
72
+ // },
73
+ // };
74
+
75
+ let inserttraxlogs = {
76
+ client_id: '201',
77
+ createAt: new Date( '2025-04-21T14:43:22.603Z' ),
78
+ sourceCheckList_id: '68065496feb4eaeb4515cf1d',
79
+ checkListName: 'Ghk',
80
+ fromCheckListName: '',
81
+ type: 'checklist',
82
+ action: 'draft',
83
+ storeName: '',
84
+ store_id: '',
85
+ createdByEmail: 'praveenraju@tangotech.co.in',
86
+ createdBy: 'Praveen Raju',
87
+ coverage: 'store',
88
+ logDetails: {
89
+ schedule: {
90
+ previous: {
91
+ scheduleDateString: '28 Apr, 2025',
92
+ schedule: 'onetime',
93
+ time: '10:00 AM to 10:00 PM',
94
+ scheduleRepeatedDay: '',
95
+ scheduleRepeatedType: 'onetime',
96
+ scheduleWeekDays: [],
97
+ scheduleRepeatedMonthWeek: '',
98
+ specificDate: [],
99
+ },
100
+ new: {
101
+ scheduleDateString: '29 Apr, 2025',
102
+ schedule: 'onetime',
103
+ time: '10:00 AM to 10:00 PM',
104
+ scheduleRepeatedDay: '',
105
+ scheduleRepeatedType: 'onetime',
106
+ scheduleWeekDays: [],
107
+ scheduleRepeatedMonthWeek: '',
108
+ specificDate: [],
109
+ },
110
+ },
111
+ response: { previous: [], new: [] },
112
+ approver: {},
113
+ owner: {},
114
+ storeAdded: [ 'test_Eye52', 'test_Eye53' ],
115
+ storeRemoved: [],
116
+ userAdded: [],
117
+ userRemoved: [],
118
+ },
119
+ userType: 'tango',
120
+ };
121
+ // console.log( 'inserttraxlogs =>', inserttraxlogs );
122
+ let insertOS = await insertOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, inserttraxlogs );
123
+ console.log( 'insertOS', insertOS );
124
+ return res.sendSuccess( 'insert successfully' );
125
+ // if ( insertOS && insertOS.body.result == 'created' ) {
126
+ // emailersIds.push( insertOS.body._id );
127
+ // }
128
+ } catch ( e ) {
129
+ // logger.error( 'insertLog =>', e );
130
+ // console.log( 'insertLog =>', e );
131
+ return res.sendError( e, 500 );
132
+ }
133
+ };
134
+ export const updateLog = async ( req, res ) => {
135
+ try {
136
+ // console.log( 'update' );
137
+ const document = {
138
+ doc: {
139
+ storeName: 'LKST008',
140
+ // fromDate: '2025-01-13',
141
+ // toDate: '2025-01-19',
142
+ // status: 'completed',
143
+ // storeIds: [ '347-1' ],
144
+ },
145
+ };
146
+ let updateResult = await updateOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, '5DwBYZUBcRcpuflp5oek', document );
147
+ // console.log( 'updateResult', updateResult );
148
+ if ( updateResult?.statusCode == 200 && updateResult?.body?.result == 'updated' ) {
149
+ return res.sendSuccess( 'Email Send Successfully' );
150
+ } else {
151
+ return res.sendSuccess( 'Email Send Successfully' );
152
+ // return res.sendError( { error: error }, 500 );
153
+ }
154
+ } catch ( e ) {
155
+ logger.error( 'updateLog =>', e );
156
+ return res.sendError( e, 500 );
157
+ }
158
+ };
159
+ export const listLog = async ( req, res ) => {
160
+ try {
161
+ let requestBody = req.body;
162
+ let from = ( requestBody.offset ) * requestBody.limit;
163
+
164
+ let start = new Date( requestBody.fromDate );
165
+ let userTimezoneOffset = start.getTimezoneOffset() * 60000;
166
+ start = new Date( start.getTime() - userTimezoneOffset );
167
+ start.setUTCHours( 0, 0, 0, 0 );
168
+ let end = new Date( requestBody.toDate );
169
+ end = new Date( end.getTime() - userTimezoneOffset );
170
+ end.setUTCHours( 23, 59, 59, 59 );
171
+
172
+ // console.log( 'list' );
173
+ const mustConditions = [];
174
+
175
+ if ( requestBody.clientId ) {
176
+ mustConditions.push( { term: { client_id: requestBody.clientId } } );
177
+ }
178
+
179
+ if ( requestBody.type ) {
180
+ mustConditions.push( { term: { type: requestBody.type } } );
181
+ }
182
+ if ( requestBody.action && requestBody.action.length > 0 ) {
183
+ mustConditions.push( { terms: { action: requestBody.action } } );
184
+ }
185
+
186
+ if ( req.user.userType == 'client' && req.user.role == 'user' ) {
187
+ return res.sendError( 'no data found', 204 );
188
+ }
189
+ let sourceCheckListIds;
190
+ if ( req.user.userType === 'client' && req.user.role == 'admin' ) {
191
+ if ( requestBody.type === 'checklist' ) {
192
+ const sourceCheckListResult = await checklistService.aggregate( [
193
+ // { $match: { 'owner.value': req.user.email } },
194
+ { $match: { $or: [ { 'owner.value': req.user.email }, { 'approver.value': req.user.email } ] } },
195
+ { $group: { _id: null, checklistIds: { $push: { $toString: '$_id' } } } },
196
+ { $project: { _id: 0, checklistIds: 1 } },
197
+ ] );
198
+ sourceCheckListIds = sourceCheckListResult.length > 0 ? sourceCheckListResult[0].checklistIds : [];
199
+ // console.log( 'sourceCheckListIds', sourceCheckListIds );
200
+ }
201
+ if ( requestBody.type === 'task' ) {
202
+ const sourceCheckListResult = await taskconfigService.aggregate( [
203
+ { $match: { createdBy: req.user._id } },
204
+ // { $match: { $or: [ { 'owner.value': req.user.email }, { 'approver.value': req.user.email } ] } },
205
+ { $group: { _id: null, checklistIds: { $push: { $toString: '$_id' } } } },
206
+ { $project: { _id: 0, checklistIds: 1 } },
207
+ ] );
208
+ sourceCheckListIds = sourceCheckListResult.length > 0 ? sourceCheckListResult[0].checklistIds : [];
209
+ // console.log( 'sourceCheckListIds', sourceCheckListIds );
210
+ }
211
+
212
+ // mustConditions.push( { terms: { $or: [ { store_id: { $in: requestBody.storeId } }, { store_id: { $eq: '' }, userEmail: { $in: requestBody.userEmailes } }, { sourceCheckList_id: { $in: sourceCheckListIds } } ] } } );
213
+ mustConditions.push( {
214
+ 'bool': {
215
+ 'should': [
216
+ { 'terms': { 'store_id': requestBody.storeId } },
217
+ {
218
+ 'bool': {
219
+ 'must': [
220
+ { 'term': { 'store_id': '' } },
221
+ { 'terms': { 'userEmail': requestBody.userEmailes } },
222
+ ],
223
+ },
224
+ },
225
+ { 'terms': { 'sourceCheckList_id': sourceCheckListIds.map( String ) } },
226
+ ],
227
+ 'minimum_should_match': 1,
228
+ },
229
+ } );
230
+ }
231
+ if ( req.user.userType === 'client' ) {
232
+ mustConditions.push( {
233
+ term: { userType: 'client' },
234
+ } );
235
+ }
236
+
237
+
238
+ if ( requestBody.searchValue ) {
239
+ mustConditions.push( { multi_match: {
240
+ 'query': requestBody.searchValue,
241
+ 'fields': [ 'checkListName', 'storeName', 'createdByEmail' ],
242
+ 'type': 'phrase_prefix',
243
+ },
244
+ } );
245
+ }
246
+ // console.log( 'Generated Query:', JSON.stringify( mustConditions, null, 2 ) );
247
+
248
+ // console.log( 'mustConditions =>', mustConditions );
249
+ if ( requestBody.fromDate && requestBody.toDate ) {
250
+ mustConditions.push( {
251
+ range: {
252
+ createAt: {
253
+ gte: start, // Start date
254
+ lte: end, // End date
255
+ },
256
+ },
257
+ } );
258
+ }
259
+ let sortCreatedAt = 'desc';
260
+ if ( requestBody.sortColumnName && requestBody.sortColumnName != '' ) {
261
+ if ( requestBody.sortBy == '1' ) {
262
+ sortCreatedAt = 'asc';
263
+ }
264
+ }
265
+ let query = {
266
+ from: parseInt( from ),
267
+ size: parseInt( requestBody.limit ),
268
+ track_total_hits: true,
269
+ query: {
270
+ bool: {
271
+ must: mustConditions,
272
+ },
273
+ },
274
+ sort: [
275
+ {
276
+ createAt: {
277
+ order: sortCreatedAt,
278
+ },
279
+ },
280
+ '_doc',
281
+ ],
282
+ };
283
+ // console.log( 'Executing OpenSearch Query:', JSON.stringify( query, null, 2 ) );
284
+ let result = await getOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, query );
285
+ // console.log( 'OpenSearch Raw Response', JSON.stringify( result, null, 2 ) );
286
+ if ( !result || !result.body.hits.hits.length ) {
287
+ return res.sendError( 'no data found', 204 );
288
+ }
289
+ return res.sendSuccess( { count: result.body.hits.total.value, result: result.body.hits.hits } );
290
+ } catch ( e ) {
291
+ // console.log( 'listLog', e );
292
+ return res.sendError( e, 500 );
293
+ }
294
+ };
@@ -43,7 +43,7 @@ export const downloadInsert = async ( req, res ) => {
43
43
  }
44
44
  }
45
45
  }
46
- console.log( requestData );
46
+ // console.log( requestData );
47
47
 
48
48
  if ( requestData.sourceCheckList_id && requestData.sourceCheckList_id != '' ) {
49
49
  let getChecklistQuery = [];
@@ -64,7 +64,7 @@ export const downloadInsert = async ( req, res ) => {
64
64
  },
65
65
  } );
66
66
  } else {
67
- console.log( requestData );
67
+ // console.log( requestData );
68
68
  getChecklistQuery.push( {
69
69
  $match: {
70
70
  $and: [
@@ -82,7 +82,7 @@ export const downloadInsert = async ( req, res ) => {
82
82
  getChecklistQuery.push( { $count: 'totalCount' } );
83
83
 
84
84
  let getChecklistCount = await processedchecklistService.aggregate( getChecklistQuery );
85
- console.log( getChecklistCount );
85
+ // console.log( getChecklistCount );
86
86
  if ( requestData.insertType === 'task' ) {
87
87
  getChecklistCount = await processedTaskService.aggregate( getChecklistQuery );
88
88
  }
@@ -146,7 +146,7 @@ export const downloadInsert = async ( req, res ) => {
146
146
  'filtertype': requestData.filtertype || 'Clusters',
147
147
  'checkListType': requestData.checkListType,
148
148
  };
149
- console.log( insertData );
149
+ // console.log( insertData );
150
150
  let resultData = await downloadService.insert( insertData );
151
151
  if ( resultData ) {
152
152
  let sqsMessageRequestData = {
@@ -201,7 +201,7 @@ export const downloadInsertAI = async ( req, res ) => {
201
201
  name = requestData?.checklistName;
202
202
  }
203
203
  let findchecklist = await processedcheklistconfigService.findOne( { 'checkListType': requestData.checkListType, 'client_id': requestData.clientId } ).sort( { _id: -1 } );
204
- console.log( findchecklist );
204
+ // console.log( findchecklist );
205
205
  name = name + '-' + requestData.fileType;
206
206
  let insertData = {
207
207
  'date_string': requestData.fromDate || '',
@@ -232,10 +232,10 @@ export const downloadInsertAI = async ( req, res ) => {
232
232
  'checkListName': findchecklist.checkListName,
233
233
  'checkListDescription': findchecklist.checkListDescription,
234
234
  };
235
- console.log( requestData );
236
- console.log( insertData );
235
+ // console.log( requestData );
236
+ // console.log( insertData );
237
237
  let resultData = await downloadService.insert( insertData );
238
- console.log( resultData );
238
+ // console.log( resultData );
239
239
  if ( resultData ) {
240
240
  let sqsMessageRequestData = {
241
241
  'zipId': resultData._id,
@@ -559,6 +559,8 @@ export const getChecklistFromZipId = async ( req, res ) => {
559
559
  resultData.questions = getzipdata.questions;
560
560
  resultData.insertType = getzipdata.insertType;
561
561
  resultData.status = getzipdata.status;
562
+ resultData.fromDate = getzipdata.fromDate;
563
+ resultData.toDate = getzipdata.toDate;
562
564
  return res.sendSuccess( resultData );
563
565
  }
564
566
  } else {
@@ -586,7 +588,7 @@ export const getAiChecklistDataFromZipId = async ( req, res ) => {
586
588
  brandInfo.brandLogo = getzipdata.client_id + '/logo/' + getClientData.profileDetails.logo;
587
589
  }
588
590
  getzipdata.brandInfo = brandInfo;
589
- console.log( getzipdata );
591
+ // console.log( getzipdata );
590
592
  return res.sendSuccess( getzipdata );
591
593
  } else {
592
594
  return res.sendError( { error: 'No Data Found' }, 204 );