endpoints serie tag
This commit is contained in:
parent
a609d80de3
commit
8be80743b4
@ -4,7 +4,9 @@
|
|||||||
"endpoints": {
|
"endpoints": {
|
||||||
"library":"endpoint/library.js",
|
"library":"endpoint/library.js",
|
||||||
"book":"endpoint/book.js",
|
"book":"endpoint/book.js",
|
||||||
"author":"endpoint/author.js"
|
"author":"endpoint/author.js",
|
||||||
|
"serie":"endpoint/serie.js",
|
||||||
|
"tag":"endpoint/tag.js"
|
||||||
},
|
},
|
||||||
"urlPrefix": "http://127.0.0.1:8080",
|
"urlPrefix": "http://127.0.0.1:8080",
|
||||||
"dbfile": "/home/meutel/metadata.db"
|
"dbfile": "/home/meutel/metadata.db"
|
||||||
|
85
lib/endpoint/serie.js
Normal file
85
lib/endpoint/serie.js
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint serie.
|
||||||
|
*/
|
||||||
|
var Endpoint = require('./endpoint.js');
|
||||||
|
|
||||||
|
function Serie() {
|
||||||
|
Endpoint.call(this);
|
||||||
|
this.serieId = null;
|
||||||
|
}
|
||||||
|
Serie.prototype = Object.create(Endpoint.prototype, {
|
||||||
|
|
||||||
|
bind: {
|
||||||
|
value: function(action, params, callback) {
|
||||||
|
switch (action.name) {
|
||||||
|
case 'show':
|
||||||
|
action.resId = this.serieId;
|
||||||
|
action.getRelated = function(res,relcback){
|
||||||
|
var rels = new Array();
|
||||||
|
var nbrels = 2; // number of requests for rel
|
||||||
|
// call callback when no more requests running
|
||||||
|
var endrels = function(err) {
|
||||||
|
nbrels--;
|
||||||
|
if (err) logger.error(err);
|
||||||
|
if (nbrels == 0) relcback(null, rels);
|
||||||
|
};
|
||||||
|
// author
|
||||||
|
var raq = 'SELECT DISTINCT author FROM books_series_link AS bsl, books_authors_link AS bal WHERE bsl.book = bal.book AND bsl.series = ?';
|
||||||
|
db.each(raq, res.id, function (err, row) {
|
||||||
|
if (!err && row.author)
|
||||||
|
rels.push({ type: 'author', path: '/author/'+row.author });
|
||||||
|
}, endrels);
|
||||||
|
// books
|
||||||
|
var rbq = 'SELECT * FROM books_series_link WHERE series = ?';
|
||||||
|
db.each(rbq, res.id, function (err, row) {
|
||||||
|
if (!err && row.book)
|
||||||
|
rels.push({ type: 'book', path: '/book/'+row.book });
|
||||||
|
}, endrels);
|
||||||
|
};
|
||||||
|
action.loadResource = function(resId, callback) {
|
||||||
|
logger.debug('loading serie ' + resId);
|
||||||
|
db.get('SELECT * FROM series WHERE id = '+ resId, function(err, row) {
|
||||||
|
callback(err, row);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
callback(null, action);
|
||||||
|
break;
|
||||||
|
case 'list':
|
||||||
|
//TODO related
|
||||||
|
action.loadResources = function(onload, onend) {
|
||||||
|
var query = 'SELECT * FROM series ';
|
||||||
|
//TODO factorize
|
||||||
|
if (!this.perPage) this.perPage = 30;
|
||||||
|
//TODO sanitize
|
||||||
|
if (!this.page) this.page = 0;
|
||||||
|
query += ' LIMIT ? OFFSET ?';
|
||||||
|
db.each(query, this.perPage, this.page*this.perPage, function (err, row) {
|
||||||
|
onload(err, row);
|
||||||
|
}, function(err) {
|
||||||
|
//TODO err
|
||||||
|
if (err) logger.error(err);
|
||||||
|
onend();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
callback(null, action);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
callback(new Error('action not implemented'));
|
||||||
|
}
|
||||||
|
}, enumerable: true, configurable: true, writable: true
|
||||||
|
},
|
||||||
|
targetCollection : {
|
||||||
|
value: function(pathname) {
|
||||||
|
var match = PATH_RE.exec(pathname);
|
||||||
|
logger.debug('pathname ' + pathname + ' => ' + match);
|
||||||
|
if (match.length > 2 && match[2]) {
|
||||||
|
// TODO check integer
|
||||||
|
this.serieId = match[2];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}, enumerable: true, configurable: true, writable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports = module.exports = new Serie();
|
61
lib/endpoint/tag.js
Normal file
61
lib/endpoint/tag.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* Endpoint tag.
|
||||||
|
*/
|
||||||
|
var Endpoint = require('./endpoint.js');
|
||||||
|
|
||||||
|
function Tag() {
|
||||||
|
Endpoint.call(this);
|
||||||
|
this.tagId = null;
|
||||||
|
}
|
||||||
|
Tag.prototype = Object.create(Endpoint.prototype, {
|
||||||
|
|
||||||
|
bind: {
|
||||||
|
value: function(action, params, callback) {
|
||||||
|
switch (action.name) {
|
||||||
|
case 'show':
|
||||||
|
action.resId = this.tagId;
|
||||||
|
action.loadResource = function(resId, callback) {
|
||||||
|
logger.debug('loading tag ' + resId);
|
||||||
|
db.get('SELECT * FROM tags WHERE id = '+ resId, function(err, row) {
|
||||||
|
callback(err, row);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
callback(null, action);
|
||||||
|
break;
|
||||||
|
case 'list':
|
||||||
|
action.loadResources = function(onload, onend) {
|
||||||
|
var query = 'SELECT * FROM tags ';
|
||||||
|
//TODO factorize
|
||||||
|
if (!this.perPage) this.perPage = 30;
|
||||||
|
//TODO sanitize
|
||||||
|
if (!this.page) this.page = 0;
|
||||||
|
query += ' LIMIT ? OFFSET ?';
|
||||||
|
db.each(query, this.perPage, this.page*this.perPage, function (err, row) {
|
||||||
|
onload(err, row);
|
||||||
|
}, function(err) {
|
||||||
|
//TODO err
|
||||||
|
if (err) logger.error(err);
|
||||||
|
onend();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
callback(null, action);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
callback(new Error('action not implemented'));
|
||||||
|
}
|
||||||
|
}, enumerable: true, configurable: true, writable: true
|
||||||
|
},
|
||||||
|
targetCollection : {
|
||||||
|
value: function(pathname) {
|
||||||
|
var match = PATH_RE.exec(pathname);
|
||||||
|
logger.debug('pathname ' + pathname + ' => ' + match);
|
||||||
|
if (match.length > 2 && match[2]) {
|
||||||
|
// TODO check integer
|
||||||
|
this.tagId = match[2];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}, enumerable: true, configurable: true, writable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports = module.exports = new Tag();
|
Loading…
Reference in New Issue
Block a user