ride-data-store
Version:
ridematching transport logistics database
81 lines (77 loc) • 2.59 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var level;
level = require('level');
module.exports = function(dbPath, opts, cb) {
return require("geoplaces")(opts, function(places) {
var rds;
rds = require("./rds")(places, level(dbPath));
rds.placeDB = places;
rds.rest = function(auth, hook) {
return function(req, res) {
var id, m, query, ref;
res.setHeader("content-type", "text/json");
if (req.method === "POST") {
return req.on("data", function(ride) {
var err, store;
try {
ride = JSON.parse(ride);
store = function() {
return rds.save(ride, function(r) {
if (r.error) {
res.statusCode = 404;
}
console.log("SAVED", r);
res.end(JSON.stringify(r));
return typeof hook === "function" ? hook(r) : void 0;
});
};
if (ride.id) {
return auth(ride, function(access) {
if (access) {
return store();
} else {
res.statusCode = 401;
return res.end(JSON.stringify({
access: "denied"
}));
}
});
} else {
return store();
}
} catch (error) {
err = error;
res.statusCode = 400;
return res.end(JSON.stringify({
error: "error"
}));
}
});
} else {
if (id = (ref = req.url.match(/rides\/(.*?)(\?|$)/)) != null ? ref[1] : void 0) {
return rds.get(id, function(r) {
return res.end(JSON.stringify(r));
});
} else if (m = req.url.match(/\/(.*?)\/(.*?)(\?|\/|$)/)) {
query = {
from: decodeURI(m[1]),
to: decodeURI(m[2])
};
if (m = req.url.match(/time=(.*)(&|$)/)) {
query.time = m[1];
}
if (m = req.url.match(/type=(.*)(&|$)/)) {
query.type = m[1];
}
return rds.find(query, function(stream) {
return stream.pipe(res);
});
}
}
};
};
return cb(rds);
});
};
}).call(this);