1 | var collect = require('collect-stream')
|
2 | var osm2Obj = require('osm2json')
|
3 |
|
4 | var isValidContentType = require('../lib/util').isValidContentType
|
5 | var errors = require('../errors')
|
6 |
|
7 | module.exports = function (req, res, api, params, next) {
|
8 | if (!isValidContentType(req)) {
|
9 | return next(new errors.UnsupportedContentType())
|
10 | }
|
11 |
|
12 | var r = req.pipe(osm2Obj({coerceIds: false}))
|
13 | collect(r, function (err, ops) {
|
14 | if (err || !ops.length) return next(new errors.XmlParseError(err))
|
15 | if (ops.length !== 1) {
|
16 | return next(new errors.DeleteMultiple())
|
17 | }
|
18 | if (ops[0].type !== params.type) {
|
19 | return next(new errors.TypeMismatch(ops[0].type, params.type))
|
20 | }
|
21 | if (ops[0].id !== params.id) {
|
22 | return next(new errors.IdMismatch(ops[0].id, params.id))
|
23 | }
|
24 | if (!ops[0].changeset) {
|
25 | return next(new errors.MissingChangesetId())
|
26 | }
|
27 | ops[0].action = 'delete'
|
28 | api.putChanges(ops, ops[0].changeset, function (err, diffResult) {
|
29 | if (err) return next(err)
|
30 | res.setHeader('content-type', 'text/plain; charset=utf-8')
|
31 | res.end(diffResult.map(function (el) { return el.old_id }).join('\n'))
|
32 | })
|
33 | })
|
34 | }
|