const moment = require('moment'); const Validator = require('validatorjs'); const Helper = require('../library/LibHelper'); const DummyModels = require('../models/DummyModels'); const response = require('../config/response'); const LibMail = require('../library/LibMail'); Validator.useLang('en'); class DummyController { async logging(req, res) { let apiRes = {} const now = moment().unix(); try { apiRes.meta = response[201].meta; const insLog = { ip: req.ip, ips: JSON.stringify([...req.ips]), // protocol: req.protocol || null, method: req.method, path: req.path, headers: JSON.stringify({ ...req.headers }), params: JSON.stringify({ ...req.params }), request: JSON.stringify({ ...req.query, ...req.body }), cookies: JSON.stringify({ ...req.cookies }), xhr: req.xhr, response: JSON.stringify(apiRes), crt: now, }; await DummyModels.create(insLog); return res.status(201).json(apiRes); } catch (e) { apiRes = JSON.parse(JSON.stringify(response[500])); apiRes.meta.message += Helper.setErrMsg(': ' + e.message); const insLog = { method: req.method, response: JSON.stringify(apiRes), crt: now, }; await DummyModels.create(insLog); return res.status(500).json(apiRes); } } async distance(req, res) { let apiRes = {}; try { const now = moment().unix(); const { latFrom, lngFrom, latTo, lngTo } = req.query; // input validation const input = { latFrom: latFrom, lngFrom: lngFrom, latTo: latTo, lngTo: lngTo, }; const rulesInput = { latFrom: 'required|string|max:25', lngFrom: 'required|string|max:25', latTo: 'required|string|max:25', lngTo: 'required|string|max:25', }; const isInputValid = new Validator(input, rulesInput); if (isInputValid.fails()) { apiRes = JSON.parse(JSON.stringify(response[422])); apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message return res.status(200).json(apiRes); } const respData = {}; // round up with precisions digits => 4 == (10000) // reference: https://stackoverflow.com/questions/11832914/how-to-round-to-at-most-2-decimal-places-if-necessary // const precisionDigits = 10000; // distance == miles // const distance = Helper.haversineGreatCircleDistance(latFrom, lngFrom, latTo, lngTo, Helper.EARTH_RADIUS_MILES); // respData.distance_km = Helper.milesToKm(distance); // respData.distance_miles = Helper.milesToMiles(distance); // respData.distance_meters = Helper.milesToMeters(distance); // distance == km const distance = Helper.haversineGreatCircleDistance(latFrom, lngFrom, latTo, lngTo, Helper.EARTH_RADIUS_KM); respData.distance_km = Helper.kmToKm(distance); respData.distance_miles = Helper.kmToMiles(distance); respData.distance_meters = Helper.kmToMeters(distance); // distance == meters // const distance = Helper.haversineGreatCircleDistance(latFrom, lngFrom, latTo, lngTo, Helper.EARTH_RADIUS_M); // respData.distance_km = Helper.metersToKm(distance); // respData.distance_miles = Helper.metersToMiles(distance); // respData.distance_meters = Helper.metersToMeters(distance); // success response apiRes = JSON.parse(JSON.stringify(response[200])); apiRes.meta.message = 'success get distance'; apiRes.data = respData; return res.status(200).json(apiRes); } catch (e) { apiRes = JSON.parse(JSON.stringify(response[500])); apiRes.meta.message += Helper.setErrMsg(': ' + e.message); return res.status(500).json(apiRes); } } async sendEmail(req, res) { let apiRes = {}; try { const now = moment().unix(); const { subject, to } = req.body; // input validation const input = { subject, to }; const rulesInput = { subject: 'required|string|max:125', to: 'required|string|max:255', }; const isInputValid = new Validator(input, rulesInput); if (isInputValid.fails()) { apiRes = JSON.parse(JSON.stringify(response[422])); apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message return res.status(200).json(apiRes); } const mailData = { pic_name: 'Rafif Mulia', pic_mail: 'rafifrest@gmail.com', z_name: 'REST-01', z_type_name: 'Warehousing', z_workflow_name: 'Parking', shiptocode: '12330', z_fulladdress: 'Jl. Perdagangan No.101, RT.4/RW.7, Bintaro, Kec. Pesanggrahan, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12330', v_nopol: 'B 3633 EVV', da_name: 'Chienghou Zou', da_phone: '+62 8128 8789 878', }; const resp = await LibMail.sendVhcSpawnZoneMail(subject, to, mailData); // success response apiRes = JSON.parse(JSON.stringify(response[200])); apiRes.meta.message = 'success send email'; apiRes.data = resp; return res.status(200).json(apiRes); } catch (e) { apiRes = JSON.parse(JSON.stringify(response[500])); apiRes.meta.message += Helper.setErrMsg(': ' + e.message); return res.status(500).json(apiRes); } } } const object = new DummyController(); module.exports = object;