Files
gps-backend/controllers/DummyController.js
2025-05-29 08:59:40 +00:00

165 lines
5.1 KiB
JavaScript
Executable File

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;