diff --git a/app/controllers/salespd.controller.js b/app/controllers/salespd.controller.js index 73ec533..6d1f53e 100644 --- a/app/controllers/salespd.controller.js +++ b/app/controllers/salespd.controller.js @@ -2,7 +2,7 @@ const { sequelize, GeneralSection , BriefOfBusiness , DetailsOfKeyShareHolder , const { logMsg } = require('../services/logger.js'); const ApiCallHelper = require('../services/apicallhelper.js'); const request = require('request'); - +const fs = require('fs'); exports.PullSalesPdData = async (req, res) => @@ -36,21 +36,7 @@ exports.PullSalesPdData = async (req, res) => if (keys == 'section3') { Object.assign(values, { pd_id: storeId.pd_id }); await DetailsOfKeyShareHolder.create( values).then((successData)=>{logMsg.info("DetailsOfKeyShareHolder insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("DetailsOfKeyShareHolder insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section4') { Object.assign(values, { pd_id: storeId.pd_id }); await BriefOfBusiness.create( values).then((successData)=>{logMsg.info("BreifOfBusiness insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("BreifOfBusiness insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section5') { - Object.assign(values, { pd_id: storeId.pd_id }); - Object.assign(values, values[0]); - net_profit_net_loss_to_sales = parseFloat(((values.net_profit / values.sales_revenue) * 100)).toFixed(2); - income_considered_per_month = parseFloat((values.income_considered / 12)).toFixed(2); - sales_over_py = parseFloat((((values.sales_revenue - pre_year_sales) / pre_year_sales ) * 100)).toFixed(2); - net_profit_over_py = parseFloat((((values.net_profit - pre_year_net_profit) / pre_year_net_profit ) * 100)).toFixed(2); - net_profit_percentage_over_py = parseFloat(((( ((values.net_profit / values.sales_revenue ) * 100 ) - pre_year_net_pro_loss_per) / pre_year_net_pro_loss_per ) * 100)).toFixed(2); - // assign all calculated values - if(sales_over_py == "Infinity"){sales_over_py=null;}if(net_profit_over_py == "Infinity"){net_profit_over_py=null;}if(net_profit_percentage_over_py == "Infinity"){net_profit_percentage_over_py=null;} - Object.assign(values,{net_profit_net_loss_to_sales:net_profit_net_loss_to_sales , income_considered_per_month:income_considered_per_month , sales_over_py:sales_over_py , net_profit_over_py:net_profit_over_py , net_profit_percentage_over_py:net_profit_percentage_over_py}); - await FinancialInformation.create( values).then((successData)=>{logMsg.info("FinancialInformation insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("FinancialInformation insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); - pre_year_sales = values.sales_revenue; - pre_year_net_profit = values.net_profit; - pre_year_net_pro_loss_per = ((values.net_profit / values.sales_revenue ) * 100 ); - + }; if (keys == 'section6') { Object.assign(values, { pd_id: storeId.pd_id }); await PropertyInformation.create( values).then((successData)=>{logMsg.info("PropertyInformation insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("PropertyInformation insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section7') { Object.assign(values, { pd_id: storeId.pd_id }); await FinalRemarks.create( values).then((successData)=>{logMsg.info("FinalRemarks insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("FinalRemarks insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; @@ -73,20 +59,33 @@ exports.PullSalesPdData = async (req, res) => if (keys == 'section3') { Object.assign(values, { pd_id: storeId.pd_id }); await DetailsOfKeyShareHolder.create( values).then((successData)=>{logMsg.info("DetailsOfKeyShareHolder insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("DetailsOfKeyShareHolder insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section4') { Object.assign(values, { pd_id: storeId.pd_id }); await BriefOfBusiness.create( values).then((successData)=>{logMsg.info("BreifOfBusiness insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("BreifOfBusiness insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section5') { + //initially declare calculation values as 0 pre_year_sales = 0; pre_year_net_profit = 0; pre_year_net_pro_loss_per = 0; - Object.assign(values, { pd_id: storeId.pd_id }); - Object.assign(values, values[0]); - net_profit_net_loss_to_sales = parseFloat(((values.net_profit / values.sales_revenue) * 100)).toFixed(2); - income_considered_per_month = parseFloat((values.income_considered / 12)).toFixed(2); - sales_over_py = parseFloat((((values.sales_revenue - pre_year_sales) / pre_year_sales ) * 100)).toFixed(2); - net_profit_over_py = parseFloat((((values.net_profit - pre_year_net_profit) / pre_year_net_profit ) * 100)).toFixed(2); - net_profit_percentage_over_py = parseFloat(((( ((values.net_profit / values.sales_revenue ) * 100 ) - pre_year_net_pro_loss_per) / pre_year_net_pro_loss_per ) * 100)).toFixed(2); - // assign all calculated values - if(sales_over_py == "Infinity"){sales_over_py=null;}if(net_profit_over_py == "Infinity"){net_profit_over_py=null;}if(net_profit_percentage_over_py == "Infinity"){net_profit_percentage_over_py=null;} - Object.assign(values,{net_profit_net_loss_to_sales:net_profit_net_loss_to_sales , income_considered_per_month:income_considered_per_month , sales_over_py:sales_over_py , net_profit_over_py:net_profit_over_py , net_profit_percentage_over_py:net_profit_percentage_over_py}); - await FinancialInformation.create( values).then((successData)=>{logMsg.info("FinancialInformation insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("FinancialInformation insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); + for (let i = 0; i < 4; i++) + { + if(values[i]) + { + sales_revenue = values[i].sales_revenue; + net_profit = values[i].net_profit; + income_considered_per_month = parseFloat((values.income_considered / 12)).toFixed(2); + net_profit_net_loss_to_sales = parseFloat(((net_profit / sales_revenue) * 100)).toFixed(2); + sales_over_py = parseFloat((((sales_revenue - pre_year_sales) / pre_year_sales ) * 100)).toFixed(2); + net_profit_over_py = parseFloat((((net_profit - pre_year_net_profit) / pre_year_net_profit ) * 100)).toFixed(2); + net_profit_percentage_over_py = parseFloat(((( ((net_profit / sales_revenue ) * 100 ) - pre_year_net_pro_loss_per) / pre_year_net_pro_loss_per ) * 100)).toFixed(2); + if(sales_over_py == "Infinity"){sales_over_py="NA";}if(net_profit_over_py == "Infinity"){net_profit_over_py="NA";}if(net_profit_percentage_over_py == "Infinity"){net_profit_percentage_over_py="NA";} + //assign calculated value inside object(on fly object inside for loop) + Object.assign(values[i], { pd_id: storeId.pd_id , income_considered: values.income_considered , income_assessment_program_recommended: values.income_assessment_program_recommended , fixed_obligations: values.fixed_obligations , income_considered_per_month:income_considered_per_month , net_profit_net_loss_to_sales:net_profit_net_loss_to_sales , sales_over_py:sales_over_py , net_profit_over_py:net_profit_over_py , net_profit_percentage_over_py:net_profit_percentage_over_py}); + //insert data here + await FinancialInformation.create( values[i] ).then((successData)=>{logMsg.info("FinancialInformation insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("FinancialInformation insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); + //reset calculation values + pre_year_sales = sales_revenue; + pre_year_net_profit = net_profit; + pre_year_net_pro_loss_per = ((net_profit / sales_revenue ) * 100 ); + } + + } } if (keys == 'section6') { Object.assign(values, { pd_id: storeId.pd_id }); await PropertyInformation.create( values).then((successData)=>{logMsg.info("PropertyInformation insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("PropertyInformation insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; if (keys == 'section7') { Object.assign(values, { pd_id: storeId.pd_id }); await FinalRemarks.create( values).then((successData)=>{logMsg.info("FinalRemarks insert success ,PdId= "+storeId.pd_id);}).catch((err)=>{ logMsg.info("FinalRemarks insert failed ,PdId= "+storeId.pd_id+" Error = "+err);}); }; @@ -115,29 +114,45 @@ exports.PullSalesPdPhotographsData = async (req, res) => { try { + // fetch SMC PdId from DB GeneralSectionData = await GeneralSection.findOne({ where : { ref_no : req.body.pdid ,case_no :req.body.caseno, is_active : 1 }}); PdId = GeneralSectionData.dataValues.pd_id; - - const Photographdata =req.body.data; - - for(const value of Photographdata) - { - //Object.assign(value, { pd_id: PdId , ref_no :req.body.pdid}); - await Photograph.create({pd_id: PdId , ref_no :req.body.pdid , img_name :value.img_name , img :"data:image/png;base64,"+value.img}) + // convert image file to base64 code + // path = "storage/uploads/" + // file = path+img_name; + // base64_data = "data:image/png;base64," + fs.readFileSync(file, 'base64'); + // insert photograph data here + + await Photograph.create({pd_id: PdId , ref_no :req.body.pdid , img_name :req.body.img_name , img : img_name}) .then((successData)=>{logMsg.info("Photograph insert success ,PdId= "+PdId);}) - .catch((err)=>{ logMsg.info("Photograph insert failed ,PdId= "+PdId);}); - }; + .catch((err)=>{ logMsg.info("Photograph insert failed ,PdId= "+PdId+" ERROR : "+err);}); + // responce to FE setTimeout(() => { - res.send({'status':200,'message':"success",'data':"No data"}); - }, 1000); - - + res.send({'status':200,'message':"success",'data':"INSERT INTO sales_photograph (pd_id,ref_no,img_name,img) VALUES ("+PdId+","+req.body.pdid+","+req.body.img_name+","+base64_data+")"}); + }, 300); + + } catch(err) { res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }); } //end of try catch }; + +exports.imageView = async (req, res) => +{ + try + { + const filePath = "storage/uploads/"+req.query.img_name; + const { dirname } = require('path'); + const appDir = dirname(require.main.filename); + + res.sendFile(filePath , { root: appDir }); + } catch(err) { + res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }) ; + } //end of try catch +}; + exports.DownloadPdReport = async (req, res) => { try @@ -217,15 +232,15 @@ exports.SectionList = async (req, res) => { try { - applicantDetails = await ApiCallHelper.MainApplicantDetails(req.query.losid); + applicantDetails = await ApiCallHelper.MainApplicantDetails(req.query.losid); MainApplicantDetails = JSON.parse(applicantDetails); - + if(MainApplicantDetails.status == 200) { GeneralSection.findAll({ where:{main_loan_applicant:MainApplicantDetails.data.name,is_active : 1}, include: [ {model: FundRequirement }, {model: DetailsOfKeyShareHolder }, {model: FinancialInformation }, {model: FinalRemarks }, {model: BriefOfBusiness }, {model: PropertyInformation }, {model: OfficerDetails }, {model: Photograph }] }) .then(data => - { + { section_name_obj = { section1_key : "GeneralSection" , section1_name : "General Section" , @@ -577,4 +592,8 @@ exports.PropertyInformationList = async (req, res) => res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }); } //end of try catch -}; \ No newline at end of file +}; + + + + diff --git a/app/models/FinancialInformation.js b/app/models/FinancialInformation.js index 386857e..34385c5 100644 --- a/app/models/FinancialInformation.js +++ b/app/models/FinancialInformation.js @@ -16,9 +16,9 @@ module.exports = (sequelize, DataTypes) => { equipment_contribution_turnover: { type: DataTypes.STRING }, net_profit_net_loss_to_sales : { type: DataTypes.INTEGER }, income_considered_per_month : { type: DataTypes.INTEGER }, - sales_over_py : { type: DataTypes.INTEGER }, - net_profit_over_py : { type: DataTypes.INTEGER }, - net_profit_percentage_over_py : { type: DataTypes.INTEGER }, + sales_over_py : { type: DataTypes.STRING }, + net_profit_over_py : { type: DataTypes.STRING }, + net_profit_percentage_over_py : { type: DataTypes.STRING }, createdby: { type: DataTypes.INTEGER }, updatedby: { type: DataTypes.INTEGER } diff --git a/app/routes/routes.js b/app/routes/routes.js index d1f3139..04271bb 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -6,9 +6,6 @@ module.exports = app => { const { logMsg } = require('../services/logger.js'); var router = require("express").Router(); - - - /** * @swagger * /api/demo: @@ -19,11 +16,93 @@ module.exports = app => { * 200: * description: success */ - router.get("/demo", Mycontroller.Welcome); +router.get("/demo", Mycontroller.Welcome); + +// phptograph upload + const multer = require('multer'); + img_name = ""; + const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, 'storage/uploads/'); + }, + filename: (req, file, cb) => { + img_name = ""; + img_name += Date.now()+'-'+file.originalname; + cb(null, img_name); + } +}); + +const upload = multer({ storage }); +/** +* @swagger +* definitions: +* PullSalesPdPhotographsData: +* type: object +* properties: +* pdid: +* type: integer +* description: pdid +* example: 6646 +* product: +* type: string +* description: product +* example: LFMP +* caseno: +* type: string +* description: +* example: MW53315 +* img: +* type: file +* description: image file +* example: +* img_name: +* type: string +* description: image file +* example: sample +*/ +/** +* @swagger +* /api/PullSalesPdPhotographsData: +* post: +* summary: Pull SalesPd Photographs Data +* description: Pull SalesPd Photographs Data +* requestBody: +* content: +* application/json: +* schema: +* $ref: '#/definitions/PullSalesPdPhotographsData' +* responses: +* 200: +* description: success +* 500: +* description: failed +*/ +router.post('/PullSalesPdPhotographsData', upload.single('img'),function(req,res){ SalesPdController.PullSalesPdPhotographsData(req,res,img_name); } ); + /** +* @swagger +* /api/imageView: +* get: +* summary: view image file api +* description: +* parameters: +* - in: query +* name: img_name +* schema: +* type: integer +* required: true +* example: +* responses: +* 200: +* description: success +*/ +router.get('/imageView',SalesPdController.imageView); + + + /** * @swagger @@ -66,43 +145,8 @@ module.exports = app => { * description: failed */ router.post("/PullSalesPdData", SalesPdController.PullSalesPdData); - /** -* @swagger -* definitions: -* PullSalesPdPhotographsData: -* type: object -* properties: -* pdid: -* type: integer -* description: pdid -* example: 6646 -* product: -* type: string -* description: product -* example: LFMP -* data: -* type: string -* description: json string -* example: -*/ -/** -* @swagger -* /api/PullSalesPdPhotographsData: -* post: -* summary: Pull SalesPd Photographs Data -* description: Pull SalesPd Photographs Data -* requestBody: -* content: -* application/json: -* schema: -* $ref: '#/definitions/PullSalesPdPhotographsData' -* responses: -* 200: -* description: success -* 500: -* description: failed -*/ - router.post("/PullSalesPdPhotographsData", SalesPdController.PullSalesPdPhotographsData); + + /** * @swagger @@ -129,7 +173,7 @@ router.get("/DownloadPdReport", SalesPdController.DownloadPdReport); * @swagger * /api/SectionList: * get: -* summary: General Section Data List with app child section data's +* summary: General Section Data List with all child section data's * description: Get General Section Data List * parameters: * - in: query diff --git a/package-lock.json b/package-lock.json index 252f45f..e4e3e52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -684,6 +684,11 @@ "picomatch": "^2.0.4" } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -921,6 +926,43 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1141,6 +1183,46 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -1277,6 +1359,38 @@ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "optional": true }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2065,8 +2179,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isstream": { "version": "0.1.2", @@ -2411,6 +2524,14 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -2477,6 +2598,21 @@ } } }, + "multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -2751,8 +2887,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "optional": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxy-addr": { "version": "2.0.7", @@ -3200,6 +3335,11 @@ } } }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3455,6 +3595,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -3785,6 +3930,11 @@ "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 7c4e0d7..070b3b4 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "lodash": "^4.17.21", "log4js": "^6.3.0", "mssql": "^7.2.0", + "multer": "^1.4.4", "request": "^2.88.2", "sequelize": "^6.6.5", "swagger-jsdoc": "^6.1.0", diff --git a/server.js b/server.js index 7fed624..65716e4 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ require('dotenv').config(); const express = require('express') const app = express() +const bodyParser = require('body-parser'); //it is used to clear cache app.use(function(req, res, next) { res.set("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0") @@ -8,13 +9,13 @@ app.use(function(req, res, next) { res.set("Expires", 0) next() }) + + const {logMsg} = require('./app/services/logger.js'); + const swaggerJsdoc = require('swagger-jsdoc'); const swaggerUi = require('swagger-ui-express'); - - - const options = { definition: { openapi: '3.0.0', @@ -25,7 +26,6 @@ const options = { }, apis: ['./app/routes/routes.js'], // files containing annotations as above }; - const swaggerDocument = swaggerJsdoc(options); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); @@ -50,7 +50,7 @@ app.get("/", (req, res) => { app.use(express.json()) app.use(express.urlencoded({ extended: true })); - +app.use(bodyParser.json()); require("./app/routes/routes.js")(app);