134 lines
3.7 KiB
JavaScript
134 lines
3.7 KiB
JavaScript
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; |