Initial commit

This commit is contained in:
meusinfirmary
2025-04-22 14:31:37 +07:00
commit b7e852126c
115 changed files with 23188 additions and 0 deletions

View File

@ -0,0 +1,134 @@
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;