88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
|
const express = require('express');
|
||
|
const { moviesMock } = require('../utils/mocks/movies');
|
||
|
const MoviesService = require('../services/movies');
|
||
|
const {
|
||
|
movieIdSchema,
|
||
|
createMovieSchema,
|
||
|
updateMovieSchema,
|
||
|
} = require('../utils/schemas/movies');
|
||
|
|
||
|
const validationHandler = require('../utils/middleware/validationHandler');
|
||
|
|
||
|
function moviesApi(app) {
|
||
|
const router = express.Router();
|
||
|
app.use('/api/movies', router);
|
||
|
|
||
|
const moviesService = new MoviesService();
|
||
|
|
||
|
router.get('/', async (req, res, next) => {
|
||
|
const { tags } = req.query;
|
||
|
try {
|
||
|
const movies = await moviesService.list({ tags });
|
||
|
res.status(200).json({
|
||
|
data: movies,
|
||
|
message: 'movies listed',
|
||
|
});
|
||
|
} catch (err) {
|
||
|
next(err);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.get('/:id', validationHandler({id:movieIdSchema}, 'params'), async (req, res, next) => {
|
||
|
const { id } = req.params;
|
||
|
try {
|
||
|
const movie = await moviesService.get(id);
|
||
|
res.status(200).json({
|
||
|
data: movie,
|
||
|
message: 'Movie retrieved',
|
||
|
});
|
||
|
} catch (err) {
|
||
|
next(err);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.post('/', validationHandler(createMovieSchema, 'body'), async (req, res, next) => {
|
||
|
const { body: movie } = req;
|
||
|
try {
|
||
|
const createdMovie = await moviesService.create(movie);
|
||
|
res.status(201).json({
|
||
|
data: createdMovie,
|
||
|
message: 'Movie created',
|
||
|
});
|
||
|
} catch (err) {
|
||
|
next(err);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.put(
|
||
|
'/:id', validationHandler({id:movieIdSchema}, 'params'), validationHandler(updateMovieSchema, 'body'),
|
||
|
async (req, res, next) => {
|
||
|
const { body: movie } = req;
|
||
|
const { id } = req.params;
|
||
|
try {
|
||
|
const updatedMovie = await moviesService.update(id, movie);
|
||
|
res.status(200).json({
|
||
|
data: updatedMovie,
|
||
|
message: 'Movie updated',
|
||
|
});
|
||
|
} catch (err) {
|
||
|
next(err);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.delete('/:id', validationHandler({id:movieIdSchema}, 'params'), async (req, res, next) => {
|
||
|
const { id } = req.params;
|
||
|
try {
|
||
|
const movie = await moviesService.delete(id);
|
||
|
res.status(200).json({
|
||
|
data: id,
|
||
|
message: 'Movie deleted',
|
||
|
});
|
||
|
} catch (err) {
|
||
|
next(err);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = moviesApi;
|