Added release type distinction to REST API.

This commit is contained in:
2020-05-20 01:38:58 +02:00
parent 057362d011
commit b6691e1991
5 changed files with 137 additions and 73 deletions

View File

@@ -1,6 +1,6 @@
'use strict';
const { fetchActor } = require('../actors');
const { fetchActor, searchActors } = require('../actors');
async function fetchActorApi(req, res) {
const actor = await fetchActor(req.params.actorId);
@@ -13,6 +13,20 @@ async function fetchActorApi(req, res) {
res.status(404).send({ actor: null });
}
async function fetchActorsApi(req, res) {
const query = req.query.query || req.query.q;
if (query) {
const actors = await searchActors(query, req.query.limit);
res.send({ actors });
return;
}
res.send({ hint: 'specify a query or ID', actors: [] });
}
module.exports = {
fetchActor: fetchActorApi,
fetchActors: fetchActorsApi,
};

View File

@@ -2,28 +2,48 @@
const { fetchRelease, fetchReleases, searchReleases } = require('../releases');
async function fetchReleaseApi(req, res) {
const release = await fetchRelease(req.params.releaseId);
async function fetchReleaseApi(req, res, type = 'scene') {
const release = await fetchRelease(req.params.releaseId, type);
if (release) {
res.send({ release });
res.send({ [type]: release });
return;
}
res.status(404).send({ release: null });
res.status(404).send({ [type]: null });
}
async function fetchReleasesApi(req, res) {
async function fetchReleasesApi(req, res, type = 'scene') {
const query = req.query.query || req.query.q;
const releases = query
? await searchReleases(query, req.query.limit)
: await fetchReleases(req.query.limit);
? await searchReleases(query, req.query.limit, type)
: await fetchReleases(req.query.limit, type);
res.send({ releases });
res.send({ [`${type}s`]: releases });
}
async function fetchSceneApi(req, res) {
return fetchReleaseApi(req, res, 'scene');
}
async function fetchScenesApi(req, res) {
return fetchReleasesApi(req, res, 'scene');
}
async function fetchMovieApi(req, res) {
return fetchReleaseApi(req, res, 'movie');
}
async function fetchMoviesApi(req, res) {
return fetchReleasesApi(req, res, 'movie');
}
module.exports = {
fetchRelease: fetchReleaseApi,
fetchReleases: fetchReleasesApi,
fetchScene: fetchSceneApi,
fetchMovie: fetchMovieApi,
fetchScenes: fetchScenesApi,
fetchMovies: fetchMoviesApi,
};

View File

@@ -15,11 +15,16 @@ const logger = require('../logger')(__filename);
const { ActorPlugins, SitePlugins, ReleasePlugins } = require('./plugins/plugins');
const {
fetchRelease,
fetchReleases,
fetchScene,
fetchScenes,
fetchMovie,
fetchMovies,
} = require('./releases');
const { fetchActor } = require('./actors');
const {
fetchActor,
fetchActors,
} = require('./actors');
function initServer() {
const app = express();
@@ -63,9 +68,13 @@ function initServer() {
router.use(bodyParser.json({ strict: false }));
router.get('/api/releases', fetchReleases);
router.get('/api/releases/:releaseId', fetchRelease);
router.get('/api/scenes', fetchScenes);
router.get('/api/scenes/:releaseId', fetchScene);
router.get('/api/movies', fetchMovies);
router.get('/api/movies/:releaseId', fetchMovie);
router.get('/api/actors', fetchActors);
router.get('/api/actors/:actorId', fetchActor);
router.get('*', (req, res) => {