basic-expressjs/routes/movies.js

88 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2021-09-15 18:47:11 +00:00
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;