1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | var collect = require('collect-stream')
|
7 | var xtend = require('xtend')
|
8 | var osm2Obj = require('osm2json')
|
9 |
|
10 | var errors = require('../errors')
|
11 | var isValidContentType = require('../lib/util').isValidContentType
|
12 |
|
13 | module.exports = function (req, res, api, params, next) {
|
14 | if (!isValidContentType(req)) {
|
15 | return next(new errors.UnsupportedContentType())
|
16 | }
|
17 |
|
18 | var r = req.pipe(osm2Obj({types: ['changeset'], strict: true, coerceIds: false}))
|
19 | collect(r, function (err, ops) {
|
20 | if (err) return next(new errors.XmlParseError(err))
|
21 | if (!ops.length) return next(new errors.XmlMissingElement('changeset'))
|
22 |
|
23 |
|
24 |
|
25 | var mergedChangeset = ops.reduce(function (p, v) {
|
26 | p.tags = xtend(p.tags, v.tags)
|
27 | return p
|
28 | })
|
29 | api.createChangeset(mergedChangeset, function (err, id, node) {
|
30 | if (err) return next(err)
|
31 | res.setHeader('content-type', 'text/plain; charset=utf-8')
|
32 | res.end(id)
|
33 | })
|
34 | })
|
35 | }
|