let endpoint = require("@runkit/msms/endpoint-express/latest");
let klpl = require("@runkit/msms/klpl-msms/latest");
let promise = require("bluebird");
// Just provide the exports object to the endpoint helper
let app = endpoint(module.exports);
let klpl_data = false;
app.get("/klpl/:id", (req, res) => {
promise.try(()=>{
let id = Math.abs(parseInt(req.params.id));
if(('' + id).replace(/[-+\s]/g,'')>9)throw "Invalid request : " + req.params.id;
return id;
})
.then((id)=>refresh(id))
.then(data=>res.json({data:data}))
.catch(err=>res.json({error:err}));
});
app.get("/klpl", (req, res) => {
(klpl_data?promise.resolve(klpl_data):refresh()).then(render);
function render(data){
res.json({
data: data,
status: data.length ? 'Ok' : 'Maintenance in progress, Try again in few seconds.'
});
}
});
app.get("/area/by_state",(req,res)=>{res.json({data: require("@runkit/msms/kawasan-my/latest").by_state})});
app.get("/area/locations",(req,res)=>{res.json({data: require("@runkit/msms/kawasan-my/latest").locations})});
app.get("*", (req, res) => {
res.json({msms: 'Hi. Im sorry there are nothing here =P'});
});
function refresh(arg){
if (arg && !Array.isArray(arg)) arg = [arg];
return promise.all((arg || [1,9]).map(id=>
klpl.fetch('http://dbklpgis.scadatron.net/dbklpgisd:id:.xml'.replace(/:id:/, id||'1'))))
.then(_all=>{
let combined=[];
// console.log(_all.map(o=>o.map(oo=>oo['NAME']).sort()));
_all.forEach(data=>{combined = combined.concat(data)});
return combined
.filter((o,i,a)=>a.map(z=>z['ID']).indexOf(o['ID'])==i)
.sort((a, b)=>{
if(a['ID']==b['ID'])return 0;
return a['ID'].length<b['ID'].length ? -1 :
(a['ID'].length>b['ID'].length ? 1 :
(a['ID']<b['ID'] ? -1 : 1));
});
})
.then(data=>{
if(!arg) {
// klpl_data=data;
// setTimeout(refresh, 10000);
}
return data;
});
}
let _dummy = {};