tango-app-api-report 3.0.6-dev → 3.0.8-dev

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-report",
3
- "version": "3.0.6-dev",
3
+ "version": "3.0.8-dev",
4
4
  "description": "report",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -21,6 +21,7 @@
21
21
  "handlebars": "^4.7.8",
22
22
  "joi-to-swagger": "^6.2.0",
23
23
  "mongodb": "^6.5.0",
24
+ "nodemailer": "^6.9.13",
24
25
  "nodemon": "^3.1.0",
25
26
  "swagger-ui-express": "^5.0.0",
26
27
  "tango-api-schema": "^2.0.103",
@@ -1,8 +1,11 @@
1
1
  import { findOneReport, findReport, reportCreate, reportGet, reportGetSingle, reportUpdate } from '../service/report.service.js';
2
- import { appConfig, fileUpload, getObject, insertOpenSearchData, listFileByPath, logger, sendMessageToQueue } from 'tango-app-api-middleware';
2
+ import { appConfig, fileUpload, getObject, getOpenSearchData, insertOpenSearchData, listFileByPath, logger, sendMessageToQueue } from 'tango-app-api-middleware';
3
3
  import { findOneUser, getUserNameEmailById } from '../service/user.service.js';
4
4
  import { updateOneBasePriceModel } from '../service/basePrice.service.js';
5
5
  import { aggregateClient } from '../service/client.service.js';
6
+ import aws from 'aws-sdk';
7
+ import * as nodemailer from 'nodemailer';
8
+
6
9
  // import basePricingModel from 'tango-api-schema/schema/basePricing.model.js';
7
10
 
8
11
 
@@ -256,7 +259,7 @@ export async function uploadManualReport( req, res ) {
256
259
  Bucket: appConfig.cloud.aws.bucket.reportBucket,
257
260
  Key: `reports/${inputData.fileDate}/${data.reportName}/`,
258
261
  fileName: inputData.fileName,
259
- Body: req.files,
262
+ Body: req.files.files.data,
260
263
  };
261
264
  const result = await fileUpload( uploadDataParams );
262
265
  logger.info( { result: result, value: 'file upload response' } );
@@ -353,7 +356,7 @@ export async function sendReport( req, res ) {
353
356
  for ( const data of getReportList ) {
354
357
  const fetchData = {
355
358
  Bucket: appConfig.cloud.aws.bucket.reportBucket,
356
- Key: `${inputData.fileDate}/${data.reportName}/${inputData.fileDate}_${data.fileName}.${data.fileType}`,
359
+ Key: `reports/${inputData.fileDate}/${data.reportName}/${inputData.fileDate}_${data.fileName}.${data.fileType}`,
357
360
  };
358
361
  reportName.push( `${inputData.fileDate}_${data.fileName}` );
359
362
  name.push( `${data.fileName}` );
@@ -387,12 +390,12 @@ export async function sendReport( req, res ) {
387
390
  }
388
391
  }
389
392
  UserattachmentDetails.forEach( async ( userattach ) => {
390
- await sendEmail( userattach.email, subject, messageBody, userattach.attachments, config.ses.reportEmail ).then( ( response ) => {
393
+ await sendEmail( userattach.email, subject, messageBody, userattach.attachments, appConfig.cloud.aws.ses.reportEmail ).then( ( response ) => {
391
394
  result.push( response );
392
395
  } );
393
396
  } );
394
397
  if ( sendMailCount == getReportList.length ) {
395
- return res.sendError( 'File not available in bucket', 404 );
398
+ return res.sendError( 'File not available in bucket', 204 );
396
399
  }
397
400
  let user = await findOneUser( { _id: req.user._id, isActive: true } );
398
401
  if ( !user ) {
@@ -423,7 +426,8 @@ export async function sendReport( req, res ) {
423
426
  clientId: getReportList[0].clientId,
424
427
  },
425
428
  };
426
- await insertOpenSearchData( 'tango-retail-activity-logs', log );
429
+ logger.info( { log: log } );
430
+ // await insertOpenSearchData( 'tango-retail-activity-logs', log );
427
431
  return res.sendSuccess( { result: 'Report has been Sent Successfully' } );
428
432
  } else {
429
433
  return res.sendError( ' Message does not Sent & Report has been Sent Successfully', 500 );
@@ -435,6 +439,38 @@ export async function sendReport( req, res ) {
435
439
  }
436
440
  }
437
441
 
442
+ export async function getReportLog( req, res ) {
443
+ try {
444
+ const inputData = req.body;
445
+ const log = await getOpenSearchData( 'tango-retail-activity-logs',
446
+ {
447
+ 'size': 100,
448
+ 'query': {
449
+ 'bool': {
450
+ 'must': [
451
+ {
452
+ 'term': {
453
+ 'logType.keyword': 'report',
454
+ },
455
+ },
456
+ {
457
+ 'term': {
458
+ 'logData.fileDate.keyword': inputData.fileDate,
459
+ },
460
+ },
461
+
462
+ ],
463
+
464
+ },
465
+ },
466
+
467
+ } );
468
+ return res.sendSuccess( { result: log } );
469
+ } catch ( error ) {
470
+ logger.info( { error: error } );
471
+ return res.sendError( error, 500 );
472
+ }
473
+ }
438
474
  export async function updateBasePrice( req, res ) {
439
475
  try {
440
476
  const inputData = req.body;
@@ -486,4 +522,48 @@ export async function updateBasePrice( req, res ) {
486
522
  }
487
523
  }
488
524
 
525
+ export async function sendEmail( toEmail, mailSubject, htmlBody, attachment, sourceEmail ) {
526
+ return new Promise( async ( resolve, reject ) => {
527
+ try {
528
+ const ses = new aws.SES( {
529
+ apiVersion: 'latest',
530
+ region: appConfig.cloud.aws.region,
531
+ // accessKeyId: process.env.AWS_ACCESS_KEY_ID_SES,
532
+ // secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY_SES,
533
+ } );
534
+
535
+ let Attachment = [];
536
+ if ( attachment ) {
537
+ Attachment = attachment;
538
+ }
539
+ try {
540
+ let transporter = nodemailer.createTransport( {
541
+ SES: { ses, aws },
542
+ } );
543
+ let mailOptions = {
544
+ from: sourceEmail,
545
+ to: toEmail,
546
+ subject: mailSubject,
547
+ html: htmlBody,
548
+ attachments: Attachment,
549
+ };
550
+ transporter.sendMail( mailOptions )
551
+ .then( ( data ) => {
552
+ resolve( data );
553
+ } )
554
+ .catch( ( err ) => {
555
+ logger.error( err, 'Node Mailer EXCEPTION' );
556
+ reject( err );
557
+ } );
558
+ } catch ( error ) {
559
+ console.error( 'Error sending email:', error );
560
+ throw error;
561
+ }
562
+ } catch ( error ) {
563
+ console.error( 'Error sending email:', error );
564
+ throw error;
565
+ }
566
+ } );
567
+ }
568
+
489
569
 
@@ -1,6 +1,6 @@
1
1
  import j2s from 'joi-to-swagger';
2
2
 
3
- import { clientListTableSchema, downloadReportSchema, generateReportSchema, getReportListSchema, sendReportSchema, uploadManualReportSchema, uploadManualReportSchema2 } from '../dtos/report.dtos.js';
3
+ import { clientListTableSchema, downloadReportSchema, generateReportSchema, getReportListSchema, getReportLogSchema, sendReportSchema, uploadManualReportSchema, uploadManualReportSchema2 } from '../dtos/report.dtos.js';
4
4
 
5
5
  export const reportDocs = {
6
6
 
@@ -152,5 +152,28 @@ export const reportDocs = {
152
152
  },
153
153
  },
154
154
 
155
+ '/v3/report/get-report-log': {
156
+ post: {
157
+ tags: [ 'Report' ],
158
+ description: `get report log`,
159
+ operationId: 'get-report-log',
160
+ parameters: {},
161
+ requestBody: {
162
+ content: {
163
+ 'application/json': {
164
+ schema: j2s( getReportLogSchema ).swagger,
165
+ },
166
+ },
167
+ },
168
+ responses: {
169
+ 200: { description: 'Successful' },
170
+ 401: { description: 'Unauthorized User' },
171
+ 422: { description: 'Field Error' },
172
+ 500: { description: 'Server Error' },
173
+ 204: { description: 'Not Found' },
174
+ },
175
+ },
176
+ },
177
+
155
178
  };
156
179
 
@@ -128,3 +128,14 @@ export const sendReportValid = {
128
128
 
129
129
  };
130
130
 
131
+ export const getReportLogSchema = joi.object( {
132
+ fileDate: joi.string().required(),
133
+ clientId: joi.string().required(),
134
+ } );
135
+
136
+ export const getReportLogValid = {
137
+ body: getReportLogSchema,
138
+
139
+ };
140
+
141
+
@@ -1,8 +1,8 @@
1
1
 
2
2
  import express from 'express';
3
3
  import { authorize, isAllowedSessionHandler, validate } from 'tango-app-api-middleware';
4
- import { addReportValid, clientListTableValid, downloadReportValid, generateReportValid, getReportListValid, getReportValid, getSingleReportValid, sendReportValid, updateReportValid } from '../dtos/report.dtos.js';
5
- import { clientReportList, createReport, dowloadReport, generateReport, getReport, getReportList, getSingleReport, sendReport, updateBasePrice, updateReport, uploadManualReport } from '../controllers/report.controllers.js';
4
+ import { addReportValid, clientListTableValid, downloadReportValid, generateReportValid, getReportListValid, getReportLogValid, getReportValid, getSingleReportValid, sendReportValid, updateReportValid } from '../dtos/report.dtos.js';
5
+ import { clientReportList, createReport, dowloadReport, generateReport, getReport, getReportList, getReportLog, getSingleReport, sendReport, updateBasePrice, updateReport, uploadManualReport } from '../controllers/report.controllers.js';
6
6
  import { isFileExist, isFolderExist, isReportEnable } from '../validations/report.validations.js';
7
7
 
8
8
  export const reportRouter = express.Router();
@@ -59,6 +59,12 @@ reportRouter.post( '/send-report', isAllowedSessionHandler,
59
59
  ] } ),
60
60
  validate( sendReportValid ), isReportEnable, sendReport );
61
61
 
62
+ reportRouter.post( '/get-report-log', isAllowedSessionHandler,
63
+ authorize( { userType: [ 'tango' ], access: [
64
+ { featureName: 'settings', name: 'configuration', permissions: [ 'isView' ] },
65
+ ] } ),
66
+ validate( getReportLogValid ), getReportLog );
67
+
62
68
  reportRouter.post( '/invoice', updateBasePrice );
63
69
 
64
70
  export default reportRouter;