1 | var db = require('../db')
|
2 |
|
3 | module.exports = function putItem(store, data, cb) {
|
4 |
|
5 | store.getTable(data.TableName, function(err, table) {
|
6 | if (err) return cb(err)
|
7 |
|
8 | if ((err = db.validateItem(data.Item, table)) != null) return cb(err)
|
9 |
|
10 | var itemDb = store.getItemDb(data.TableName), key = db.createKey(data.Item, table)
|
11 |
|
12 | itemDb.lock(key, function(release) {
|
13 | cb = release(cb)
|
14 |
|
15 | itemDb.get(key, function(err, existingItem) {
|
16 | if (err && err.name != 'NotFoundError') return cb(err)
|
17 |
|
18 | if ((err = db.checkConditional(data, existingItem)) != null) return cb(err)
|
19 |
|
20 | var returnObj = {}
|
21 |
|
22 | if (existingItem && data.ReturnValues == 'ALL_OLD')
|
23 | returnObj.Attributes = existingItem
|
24 |
|
25 | returnObj.ConsumedCapacity = db.addConsumedCapacity(data, false, existingItem, data.Item)
|
26 |
|
27 | db.updateIndexes(store, table, existingItem, data.Item, function(err) {
|
28 | if (err) return cb(err)
|
29 |
|
30 | itemDb.put(key, data.Item, function(err) {
|
31 | if (err) return cb(err)
|
32 | cb(null, returnObj)
|
33 | })
|
34 | })
|
35 | })
|
36 | })
|
37 | })
|
38 | }
|