1 | var errors = require('../errors')
|
2 | var util = require('../lib/util')
|
3 |
|
4 | module.exports = function (osm) {
|
5 | return function createElement (element, cb) {
|
6 |
|
7 | var id = util.generateId()
|
8 | var changesetId = element.changeset
|
9 |
|
10 | if (!changesetId) {
|
11 | return cb(new errors.MissingChangesetId())
|
12 | }
|
13 |
|
14 | osm.get(changesetId, function (err, docs) {
|
15 | if (err) return cb(err)
|
16 | if (Object.keys(docs).length === 0) {
|
17 | return cb(new errors.MissingChangeset(changesetId))
|
18 | }
|
19 | var closedAt = Object.keys(docs).reduce(function (p, v) {
|
20 | if (p) return p
|
21 | return docs[v].closedAt || docs[v].closed_at
|
22 | }, false)
|
23 | if (closedAt) {
|
24 | return cb(new errors.ClosedChangeset(changesetId, closedAt))
|
25 | }
|
26 | var op = Object.assign(util.nodes2refs(element), {
|
27 | timestamp: new Date().toISOString()
|
28 | })
|
29 | osm.put(id, op, function (err, node) {
|
30 | if (err) return cb(err)
|
31 | cb(null, id, node)
|
32 | })
|
33 | })
|
34 | }
|
35 | }
|