/
recommendation-service.js
74 lines (68 loc) · 2.67 KB
/
recommendation-service.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
var Promise = require('promise')
var PouchDB = require('pouchdb')
var recommendationsDB = new PouchDB('recommendations_db')
var log = console.log.bind(console)
var jlog = function(x) { console.log(JSON.stringify(x, null, 3)) }
// genrelist service
function RecommendationsService() {}
RecommendationsService.prototype = {
getGenreList: function(userId) {
var self = this
if (self.cache) {
return Promise.resolve(self.cache)
} else {
return recommendationsDB.get((userId || 'all').toString())
.then(function(response) {
self.cache = response.recommendations
return response.recommendations
})
}
},
addTitleToGenreList: function(userId, genreIndex, titles) {
return recommendationsDB.get(userId)
.then(function(response) {
var titlesLength = response.recommendations[genreIndex].titles.push(titles);
return recommendationsDB.put({
_id: userId,
_rev: response._rev,
recommendations: response.recommendations
}).then(function(a) {
return [
{
path: ['genrelist', genreIndex, 'titles', titlesLength - 1],
value: titles
},
{
path: ['genrelist', genreIndex, 'titles', 'length'],
value: titlesLength
}
];
});
});
},
//@TODO: untested.
//[].splice(index, howMany, replce, replce, replce) takes unlimited number of the final argument
spliceTitleFromGenreList: function(userId, a, b, c) {
return recommendationsDB.get(userId)
.then(function(response) {
var titlesLength = response.recommendations[genreIndex].titles.splice(a, b, c);
return recommendationsDB.put({
_id: userId,
_rev: response._rev,
recommendations: response.recommendations
}).then(function() {
return [
{
path: ['genrelist', genreIndex, 'titles', titlesLength - 1],
value: titles
},
{
path: ['genrelist', genreIndex, 'titles', 'length'],
value: titlesLength
}
];
});
});
}
}
module.exports = new RecommendationsService()