Api/v2 #111
33
seasoned_api/src/request/request.js
Normal file
33
seasoned_api/src/request/request.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const establishedDatabase = require('src/database/database');
|
||||||
|
|
||||||
|
class RequestRepository {
|
||||||
|
constructor(database) {
|
||||||
|
this.database = database || establishedDatabase;
|
||||||
|
this.queries = {
|
||||||
|
add: 'insert into request (id,title,year,type) values(?,?,?,?)',
|
||||||
|
read: 'select * from request where id is ? and type is ?'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add tmdb movie|show to requests
|
||||||
|
* @param {tmdb} tmdb class of movie|show to add
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
addTmdb(tmdb) {
|
||||||
|
return Promise.resolve()
|
||||||
|
.then(() => this.database.get(this.queries.read, [tmdb.id, tmdb.type]))
|
||||||
|
.then(row => assert.equal(row, undefined, 'Id has already been requested'))
|
||||||
|
.then(() => this.database.run(this.queries.add, [tmdb.id, tmdb.title||tmdb.name, tmdb.year, tmdb.type]))
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === 'AssertionError' || error.message.endsWith('been requested')) {
|
||||||
|
throw new Error('This id is already requested', error.message);
|
||||||
|
}
|
||||||
|
console.log('Error @ request.addTmdb:', error);
|
||||||
|
throw new Error('Could not add request');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = RequestRepository;
|
||||||
@@ -90,6 +90,8 @@ router.get('/v1/plex/hook', require('./controllers/plex/hookDump.js'));
|
|||||||
/**
|
/**
|
||||||
* Requests
|
* Requests
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
router.post('/v2/request/:id', require('./controllers/request/requestTmdbId.js'));
|
||||||
router.get('/v1/plex/requests/all', require('./controllers/plex/fetchRequested.js'));
|
router.get('/v1/plex/requests/all', require('./controllers/plex/fetchRequested.js'));
|
||||||
router.put('/v1/plex/request/:requestId', mustBeAuthenticated, require('./controllers/plex/updateRequested.js'));
|
router.put('/v1/plex/request/:requestId', mustBeAuthenticated, require('./controllers/plex/updateRequested.js'));
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
const configuration = require('src/config/configuration').getInstance();
|
||||||
|
const Cache = require('src/tmdb/cache');
|
||||||
|
const TMDB = require('src/tmdb/tmdb');
|
||||||
|
const RequestRepository = require('src/request/request');
|
||||||
|
const cache = new Cache();
|
||||||
|
const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey'));
|
||||||
|
const request = new RequestRepository();
|
||||||
|
|
||||||
|
const typeFunction = (type) => {
|
||||||
|
type = type.toLowerCase();
|
||||||
|
if (type === 'movie') {
|
||||||
|
return tmdb.movieInfo;
|
||||||
|
} else if (type === 'show') {
|
||||||
|
return tmdb.showInfo;
|
||||||
|
} else {
|
||||||
|
throw new Error("Unprocessable Entity: Invalid type for query 'type'. Allowed values: movie|show");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Controller: Request by id with type param
|
||||||
|
* @param {Request} req http request variable
|
||||||
|
* @param {Response} res
|
||||||
|
* @returns {Callback}
|
||||||
|
*/
|
||||||
|
function requestTmdbIdController(req, res) {
|
||||||
|
const requestId = req.params.id;
|
||||||
|
const { type } = req.query;
|
||||||
|
|
||||||
|
Promise.resolve()
|
||||||
|
.then(() => typeFunction(type))
|
||||||
|
// .then(() => checkType
|
||||||
|
.then(() => tmdb.movieInfo(requestId))
|
||||||
|
.then((movie) => request.addTmdb(movie))
|
||||||
|
.then(() => res.send({sucess: true, message: 'Request has been submitted.'}))
|
||||||
|
.catch((error) => {
|
||||||
|
res.status(404).send({ success: false, error: error.message });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = requestTmdbIdController;
|
||||||
Reference in New Issue
Block a user