osm-p2p-server
Version:
Peer-to-peer OpenStreetMap API v0.6 Server
35 lines (31 loc) • 1.17 kB
JavaScript
var collect = require('collect-stream')
var osm2Obj = require('../lib/osm2obj')
var isValidContentType = require('../lib/util').isValidContentType
var errors = require('../errors')
module.exports = function (req, res, api, params, next) {
if (!isValidContentType(req)) {
return next(new errors.UnsupportedContentType())
}
var r = req.pipe(osm2Obj(api, {coerceIds: false}))
collect(r, function (err, ops) {
if (err || !ops.length) return next(new errors.XmlParseError(err))
if (ops.length !== 1) {
return next(new errors.DeleteMultiple())
}
if (ops[0].type !== params.type) {
return next(new errors.TypeMismatch(ops[0].type, params.type))
}
if (ops[0].id !== params.id) {
return next(new errors.IdMismatch(ops[0].id, params.id))
}
if (!ops[0].changeset) {
return next(new errors.MissingChangesetId())
}
ops[0].action = 'delete'
api.putChanges(ops, ops[0].changeset, function (err, diffResult) {
if (err) return next(err)
res.setHeader('content-type', 'text/plain; charset=utf-8')
res.end(diffResult.map(function (el) { return el.old_id }).join('\n'))
})
})
}