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;