osm-p2p-server
Version:
Peer-to-peer OpenStreetMap API v0.6 Server
33 lines (31 loc) • 1.07 kB
JavaScript
var errors = require('../errors')
/**
* Check:
* 1. A doc with the given id exists in the database
* 2. If no version is given, doc must not be forked
* 3. The doc is a changeset
* 4. The changeset is not closed
*/
module.exports = function validateChangeset (osm, id, version, cb) {
osm.get(id, function (err, docs) {
if (err) return cb(err)
if (Object.keys(docs).length === 0) {
return cb(new errors.NotFound('changeset #' + id))
}
if (!version && Object.keys(docs).length > 1) {
return cb(new errors.ForkedChangeset())
}
var doc = version ? docs[version] : docs[Object.keys(docs)[0]]
if (!doc) {
return cb(new errors.NotFound('changeset #' + id + ' version #' + version))
}
if (doc.type !== 'changeset') {
return cb(new errors.NotFound('changeset #' + id))
}
if (!doc) return cb(new errors.NotFound('changeset id: #' + id + ' version: #' + version))
if (doc.closedAt || doc.closed_at) {
return cb(new errors.ClosedChangeset(id, doc.closedAt || doc.closed_at))
}
cb()
})
}