filter/dist/routes/filter.js

293 lines
11 KiB
JavaScript

"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var route_1 = require("./route");
var redis = require("redis");
var FilterRoute = (function (_super) {
__extends(FilterRoute, _super);
function FilterRoute() {
return _super.call(this) || this;
}
FilterRoute.create = function (router) {
var _this = this;
console.log("[FilterRoute::create] Creating filter route.");
this.client.lrange('imena', 0, -1, function (err, result) {
result.forEach(function (ime) {
FilterRoute.seznamImen.push(new RegExp('\\b' + ime
.replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c') + '\\b', 'gi'));
});
});
this.client.lrange('priimki', 0, -1, function (err, result) {
result.forEach(function (priimek) {
FilterRoute.seznamPriimkov.push(new RegExp('\\b' + priimek
.replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c') + '\\b', 'gi'));
});
});
this.client.lrange('ulice', 0, -1, function (err, result) {
result.forEach(function (ulica) {
FilterRoute.seznamUlic.push(new RegExp('\\b' + ulica
.replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c') + '\\b', 'gi'));
});
});
this.client.lrange('filtri', 0, -1, function (err, result) {
_this.seznamFiltrov = result;
});
this.seznamOblik = ['\\bdoo\\b', '\\bsp\\b', '\\bgiz\\b', '\\bdno\\b', '\\bdd\\b',
'\\bd\\.o\\.o\\.', '\\bs\\.p\\.', '\\bg\\.i\\.z\\.',
'\\bd\\.n\\.o\\.', '\\bd\\.d\\.'];
router.get("/filter", function (req, res, next) {
new FilterRoute().filter(req, res, next);
});
router.post("/filter", function (req, res, next) {
new FilterRoute().filterPost(req, res, next);
});
router.post("/filter/bulk", function (req, res, next) {
new FilterRoute().filterBulk(req, res, next);
});
};
FilterRoute.prototype.filter = function (req, res, next) {
this.title = "Filter";
res.redirect('/');
};
FilterRoute.prototype.filterPost = function (req, res, next) {
var _this = this;
this.title = "Rezultati testa";
var odgovor = {
'vsebujeIme': 0,
'vsebujePriimek': 0,
'vsebujeUlico': 0,
'vsebujeObliko': 0,
'vsebujeDavcno': 0,
'vsebujeMaticno': 0,
'vsebujeFilter': 0,
'najdeniFiltri': [],
'niz': '<prazen niz>',
'id': 0,
};
FilterRoute.client.lrange('filtri', 0, -1, function (err, result) {
if (err) {
console.log(err);
}
else {
FilterRoute.seznamFiltrov = result;
_this.preveriNiz(req.body.niz, '1234', function (err, odgovor1) {
if (err) {
console.log(err);
}
_this.render(req, res, 'index', odgovor1);
});
}
});
};
FilterRoute.prototype.filterBulk = function (req, res, next) {
var _this = this;
FilterRoute.client.lrange('filtri', 0, -1, function (err, result) {
if (err) {
console.log(err);
}
else {
var seznamFiltrov = result;
FilterRoute.seznamFiltrov = result;
var odgovor = {
rezultat: []
};
for (var index = 0; index < req.body.nizi.length; index++) {
_this.preveriNiz(req.body.nizi[index], req.body.id[index], function (err, result) {
odgovor.rezultat.push(result);
});
}
res.json(odgovor);
}
});
};
FilterRoute.prototype.preveriNiz = function (niz, id, callback) {
var mojNiz;
var napaka = '';
var odgovor = {
'vsebujeIme': 0,
'vsebujePriimek': 0,
'vsebujeUlico': 0,
'vsebujeObliko': 0,
'vsebujeDavcno': 0,
'vsebujeMaticno': 0,
'vsebujeFilter': 0,
'najdeniFiltri': [],
'niz': '<prazen niz>',
'id': 0,
};
var vse = 7;
var koncano = 0;
var opNajdeni = 0;
odgovor.id = id;
odgovor.niz = niz;
var err = '';
FilterRoute.client.incr('stats:obdelanih', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
FilterRoute.seznamImen.forEach(function (ime) {
if (niz.toLowerCase().replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c')
.search(ime) != -1) {
odgovor.vsebujeIme++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeIme', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
});
FilterRoute.seznamPriimkov.forEach(function (priimek) {
if (niz.toLowerCase().replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c')
.search(priimek) != -1) {
odgovor.vsebujePriimek++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujePriimek', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
});
FilterRoute.seznamUlic.forEach(function (ulica) {
if (niz.toLowerCase().replace(/č/g, 'c')
.replace(/š/g, 's')
.replace(/ž/g, 'z')
.replace(/đ/g, 'd')
.replace(/ć/g, 'c')
.search(ulica) != -1) {
odgovor.vsebujeUlico++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeUlico', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
});
FilterRoute.seznamOblik.forEach(function (oblika) {
var re = new RegExp(oblika, "gi");
if (niz.toLowerCase().search(re) != -1) {
odgovor.vsebujeObliko++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeObliko', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
});
if (niz.search(/\b[1-9]\d\d\d\d\d\d\d\b/) != -1) {
var idavcna;
var kontrolna;
var index = niz.search(/\b[1-9]\d\d\d\d\d\d\d\b/);
var davcna = niz.substring(index, index + 8);
idavcna = 8 * Number(davcna[0]) +
7 * Number(davcna[1]) +
6 * Number(davcna[2]) +
5 * Number(davcna[3]) +
4 * Number(davcna[4]) +
3 * Number(davcna[5]) +
2 * Number(davcna[6]);
kontrolna = 11 - (idavcna % 11);
if ((kontrolna == 10) || (kontrolna == 11)) {
kontrolna = 0;
}
if (kontrolna == Number(davcna[7])) {
odgovor.vsebujeDavcno++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeDavcno', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
}
if (niz.search(/\b[0-3]\d[0-1]\d[9|0]\d\d50\d\d\d\d\b/) != -1) {
var imaticna;
var kontrolna;
var index = niz.search(/\b[0-3]\d[0-1]\d[9|0]\d\d50\d\d\d\d\b/);
var maticna = niz.substring(index, index + 13);
imaticna = 7 * Number(maticna[0]) +
6 * Number(maticna[1]) +
5 * Number(maticna[2]) +
4 * Number(maticna[3]) +
3 * Number(maticna[4]) +
2 * Number(maticna[5]) +
7 * Number(maticna[6]) +
6 * Number(maticna[7]) +
5 * Number(maticna[8]) +
4 * Number(maticna[9]) +
3 * Number(maticna[10]) +
2 * Number(maticna[11]);
kontrolna = imaticna % 11;
if (kontrolna != 0) {
kontrolna = 11 - kontrolna;
}
if ((kontrolna == Number(maticna[12])) && (kontrolna != 10)) {
odgovor.vsebujeMaticno++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeMaticno', function (err, result) {
if (err) {
console.log('error: ' + err.message);
}
});
}
console.log('Matična: ' + maticna);
console.log('imaticna: ' + imaticna);
console.log('Kontrolna: ' + kontrolna);
}
FilterRoute.seznamFiltrov.forEach(function (filter) {
var re = RegExp(filter.replace(/\/\//g, '/'), 'gi');
if (niz.toLowerCase().search(re) != -1) {
odgovor.vsebujeFilter++;
opNajdeni++;
FilterRoute.client.incr('stats:vsebujeFilter', function (err, result) {
if (err) {
console.log('error:' + err.message);
}
});
odgovor.najdeniFiltri.push(filter);
}
});
if (opNajdeni == 0) {
FilterRoute.client.incr('stats:niziBrezOP');
}
if (typeof callback === 'function') {
callback(err, odgovor);
}
};
return FilterRoute;
}(route_1.BaseRoute));
FilterRoute.client = redis.createClient();
FilterRoute.seznamImen = [];
FilterRoute.seznamPriimkov = [];
FilterRoute.seznamUlic = [];
FilterRoute.seznamOblik = [];
FilterRoute.seznamFiltrov = [];
exports.FilterRoute = FilterRoute;