osm-p2p-server
Version:
Peer-to-peer OpenStreetMap API v0.6 Server
36 lines (33 loc) • 1.12 kB
JavaScript
var errors = require('../errors')
module.exports = function (osm) {
return function (id, version, cb) {
if (arguments.length === 2) {
cb = version
version = null
}
// TODO: lock this record
osm.get(id, function (err, docs) {
if (err) return cb(err)
if (Object.keys(docs).length === 0) {
return cb(new errors.NotFound('changeset id: ' + id))
}
if (!version && Object.keys(docs).length > 1) {
// TODO: give more meaningful error when api is used directly.
return cb(new errors.ForkedChangeset(id))
}
var doc = version ? docs[version] : docs[Object.keys(docs)[0]]
if (!doc) return cb(new errors.NotFound('bla bla changeset id: ' + id + ' version: ' + version))
if (doc.closedAt || doc.closed_at) {
return cb(new errors.ClosedChangeset(id, doc.closedAt || doc.closed_at))
}
doc.closed_at = new Date().toISOString()
osm.put(id, doc,
{ links: version ? [version] : undefined },
function (err) {
if (err) return cb(err)
cb(null)
}
)
})
}
}