-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathshoppinglist.model.js
94 lines (84 loc) · 2.5 KB
/
shoppinglist.model.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'use strict'
const { ShoppingListFactory, ShoppingListRepositoryPouchDB } = require('ibm-shopping-list-model')
const shoppingListFactory = new ShoppingListFactory()
let shoppingListRepository = null
let db = null
const model = () => {
db = new PouchDB('shoppinglist')
db.info((err, info) => {
if (err) {
console.error(err)
} else {
console.log('db.info', info)
}
})
shoppingListRepository = new ShoppingListRepositoryPouchDB(db)
shoppingListRepository.ensureIndexes()
return model
}
model.save = doc => {
if (doc._id) {
return shoppingListRepository.get(doc._id)
.then(shoppingList => {
return shoppingListRepository.put(shoppingList.mergeDeep(doc))
.catch(console.error)
})
.catch(() => {
return shoppingListRepository.getItem(doc._id)
.then(shoppingListItem => {
return shoppingListRepository.putItem(shoppingListItem.mergeDeep(doc))
.catch(console.error)
})
})
} else if (doc.type === 'list') {
const shoppingList = shoppingListFactory.newShoppingList({
title: doc.title
})
return shoppingListRepository.put(shoppingList)
.catch(console.error)
} else if (doc.type === 'item') {
const shoppingList = shoppingListFactory.newShoppingList({
_id: doc.list
})
const shoppingListItem = shoppingListFactory.newShoppingListItem({
title: doc.title
}, shoppingList)
return shoppingListRepository.putItem(shoppingListItem)
.catch(console.error)
} else {
return Promise.reject(new Error(`Missing or unsupported type: ${doc.type}`))
}
}
model.remove = id => {
if (id) {
return shoppingListRepository.get(id)
.then(shoppingList => {
return shoppingListRepository.delete(shoppingList)
})
.catch(() => {
return shoppingListRepository.getItem(id)
.then(shoppingListItem => {
return shoppingListRepository.deleteItem(shoppingListItem)
})
})
} else {
return Promise.reject(new Error('Missing id'))
}
}
model.lists = () => {
return shoppingListRepository.find()
.then(listOfShoppingLists => {
return listOfShoppingLists ? listOfShoppingLists.valueSeq().toArray() : []
})
}
model.items = listid => {
return shoppingListRepository.findItems({
selector: {
type: 'item',
list: listid
}
}).then(listOfShoppingListItems => {
return listOfShoppingListItems ? listOfShoppingListItems.valueSeq().toArray() : []
})
}
module.exports = model