Reto aceptado mi estimado Oscar!
// GUARDAR PELICULA DEL USUARIO
- Primero cree mi action en el cual le paso el id del usuario y el id de la pelicula.
export const favoriteMovie = (userId, movie, cb) => (dispatch) => {
const data = {
userId,
movieId: movie.id,
};
axios({
url: '/user-movies',
method: 'post',
data,
})
.then(({ data }) => {
const {
data: { movieExist },
} = data;
const message = movieExist
? `${movie.title} ya esta en tus favoritos`
: `${movie.title} fue agregada a tus favoritos`;
!movieExist && dispatch(setFavorite(movie));
cb(movieExist, message);
})
.catch((err) => dispatch(setError(err)));
};
- Luego como tenemos ya la ruta del Server Render para agregar una pelicula a un usuario del curso de passport la agregue al server.js
app.post('/user-movies', async (req, res, next) => {
try {
const { body: userMovie } = req;
const { token } = req.cookies;
const { data, status } = await axios({
url: `${config.apiUrl}/api/user-movies`,
headers: { Authorization: `Bearer ${token}` },
method: 'post',
data: userMovie,
});
const {
data: { movieExist },
} = data;
if (status !== 200 && status !== 201) {
return next(boom.badImplementation());
}
const statusCode = movieExist ? 200 : 201;
return res.status(statusCode).json(data);
} catch (error) {
next(error);
}
});
// LISTAR PELICULAS DEL USUARIO
Luego en el renderApp hago la peticion para obtener las peliculas del usuario
let userMovies = await axios({
url: `${config.apiUrl}/api/user-movies/?userId=${id}`,
headers: {
Authorization: `Bearer ${token}`,
},
method: 'get',
});
Accedo a la data que me trae solo el userId y el movieId por lo que tengo que obtener toda la informacion de las peliculas filtrando del movieList para que se pinten correctamente en frontend.
userMovies = userMovies.data.data;
const myList = [];
userMovies.forEach((userMovie) => {
movieList.forEach((movie) => {
if (movie._id === userMovie.movieId) {
myList.push(movie);
}
});
});
Por ultimo se la pasa al initialState
initialState = {
user: {
email,
name,
id,
},
playing: {},
myList,
trends: movieList.filter(
(movie) => movie.contentRating === 'PG' && movie._id
),
originals: movieList.filter(
(movie) => movie.contentRating === 'G' && movie._id
),
};
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.