-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzip.js
151 lines (128 loc) · 4.96 KB
/
zip.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
var tools = require("./tools"),
db = require('./db');
/**
* zipblib.findZipByAddressStr(addr_str, callback) -> undefined
* - addr_str (String): aadress vabatekstina
* - callback (Function): tagasikutsefunktsioon
*
* Otsib aadressile vastava postiindeksi, tagasikutsefunktsioon saab
* parameetriteks error ning data, kus data on objekt, mis sisaldab kõiki
* vastusega seotud andmeid. Postiindeks asub omaduses data.zip
*
* Shortcut funktsioon findZip meetodile
**/
exports.findZipByAddressStr = function(addr_str, callback) {
var resp_obj = {}, address = {};
// teisenda vabatekstiline aadress struktureeritud objektiks
address = tools.parseAddress(addr_str);
resp_obj.request = addr_str;
resp_obj.address = address;
if(!address.street){
resp_obj.status = "INVALID ADDRESS";
return callback(new Error(resp_obj.status), resp_obj);
return;
}
// otsi postiindeks
exports.getZip(address, function(error, zip, address){
if(error){
resp_obj.status = "ERROR";
resp_obj.message = error.message;
return callback(new Error(resp_obj.status), resp_obj);
}
if(!zip){
resp_obj.status = "NOT FOUND";
return callback(new Error(resp_obj.status), resp_obj);
}
resp_obj.status = "FOUND";
resp_obj.zip = zip;
resp_obj.address = address;
resp_obj.formatted = tools.formatAddress(address);
return callback(null, resp_obj);
});
};
/**
* zipblib.findZip(addr_obj, callback) -> undefined
* - addr_obj (Object): aadress struktureeritud objektina
* - callback (Function): tagasikutsefunktsioon
*
* Otsib aadressile vastava postiindeksi, tagasikutsefunktsioon saab
* parameetriteks error, zip ning address, kus address on aadressiobjekt
* "puhastatud" kujul - sisaldab maakonda jne. Postiindeks asub omaduses data.zip
**/
exports.getZip = function(addr_obj, callback){
var //addr_obj = tools.parseAddress(addr_str),
address = tools.normalizeAddress(addr_obj),
request = {};
// koosta päring vastavalt sisendandmetele
if(address.commune){
request.commune = address.commune;
}
if(address.city){
request.city = address.city;
}
if(address.street && address.city){
request["$or"] = [{street: address.street}, {street:""}];
}
if(address.state){
request.state = address.state;
}
if(address.building){
request.start = {$lte: address.building_normalized};
request.end = {$gte: address.building_normalized};
}
if(!address.city){
sent = true;
return callback(null, null);
}
// päri andmebaasist kuni 5 vastet
db.getCollection(function(error, collection){
if(error)throw error;
collection.find(request, {limit: 5, sort:'street'}, function(error, cursor){
var sent = false, ret_addr, last, doc;
cursor.each(function(error, doc) {
if(sent)return;
if(error){
sent = true;
return callback(error, null);
}
if(!doc && last){
setup();
}
// esimene peaks olema street="" kui tegu "kõik aadressid" kohaga
if(!doc || (doc.street && doc.street!=address.street)){
sent = true;
return callback(null, null);
}
if(!doc.side || doc.side == address.street_side){
last = doc;
setup();
}else{
last = doc;
}
});
// not cool, et see funktsioon siin on, aga kuna sõltub skoobist
// siis hetkel ei tõstnud mujale
function setup(){
sent = true;
ret_addr = {
street: tools.firstCase(last.street || address.street || "").replace(/\s(\w\.|Mnt|Pst|Tee|Väljak|Plats)\s*/g,function(o){
return o.toLowerCase();
}),
building: tools.firstCase(address.building),
room: tools.firstCase(address.room),
city: tools.firstCase(last.city).replace(/\s(Küla|Vald)\s*/g,function(o){
return o.toLowerCase();
}),
commune: (last.commune?tools.firstCase(last.commune)+" vald":""),
state: last.state?tools.firstCase(last.state+"maa"):"",
zip: last.zip,
type: last.type
}
if(last.name){
ret_addr.name = tools.firstCase(last.name);
}
callback(null, last.zip, ret_addr);
}
});
});
}