const moment = require('moment'); const Validator = require('validatorjs'); const Helper = require('../library/LibHelper'); const ZoneModels = require('../models/ZoneModels'); const response = require('../config/response'); const axios = require('axios').default; const url = require('url'); const request = require('../config/request'); Validator.useLang('en'); class ZoneController { async nearest(req, res) { let apiRes = {}; try { const now = moment().unix(); const { lat, lng, meters } = req.query; // input validation const input = { lat: lat, lng: lng, meters: meters, }; const rulesInput = { lat: 'required|string|max:25', lng: 'required|string|max:25', meters: 'required|numeric', }; 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 nearest = await ZoneModels.getNearest(lat, lng, meters); // success response apiRes = JSON.parse(JSON.stringify(response[200])); apiRes.meta.message = 'success get nearest zone in meters: ' + meters; apiRes.count = nearest.length; apiRes.data = nearest; 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 inCircle(req, res) { let apiRes = {}; try { const now = moment().unix(); const { lat, lng } = req.query; // input validation const input = { lat: lat, lng: lng, }; const rulesInput = { lat: 'required|string|max:25', lng: '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 inCircle = await ZoneModels.getInCircle(lat, lng); // success response apiRes = JSON.parse(JSON.stringify(response[200])); apiRes.meta.message = 'success get in circle zone'; apiRes.count = inCircle.length; apiRes.data = inCircle; 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 inShape(req, res) { let apiRes = {}; try { const now = moment().unix(); const { lat, lng } = req.query; // input validation const input = { lat: lat, lng: lng, }; const rulesInput = { lat: 'required|string|max:25', lng: '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 inShape = await ZoneModels.getInShape(lat, lng); // success response apiRes = JSON.parse(JSON.stringify(response[200])); apiRes.meta.message = 'success get in shape zone'; apiRes.count = inShape.length; apiRes.data = inShape; 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 ZoneController(); module.exports = object;