- Vamos começar criando um método no serviço para obter os cursos da lista através do id do usuário:
// src/services/favoriteService.ts
import { Favorite } from "../models/favorite"
export const favoriteService = {
findByUserId: async (userId: number) => {
const favorites = await Favorite.findAll({
attributes: [['user_id', 'userId']],
where: { userId },
include: {
association: 'Course',
attributes: [
'id',
'name',
'synopsis',
['thumbnail_url', 'thumbnailUrl']
]
}
})
return {
userId,
courses: favorites.map(favorite => favorite.Course)
}
},
// ...
}
- Agora, no controlador, adicione o método index:
// src/controllers/favoritesController.ts
import { Response } from 'express'
import { AuthenticatedRequest } from "../middlewares/auth";
import { favoriteService } from '../services/favoriteService'
export const favoritesController = {
// GET /favorites
index: async (req: AuthenticatedRequest, res: Response) => {
const userId = req.user!.id
try {
const favorites = await favoriteService.findByUserId(userId)
return res.json(favorites)
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
},
// ...
}
- E por fim crie a rota e adicione o método:
// src/routes.ts
// ...
router.get('/favorites', ensureAuth, favoritesController.index)
router.post('/favorites', ensureAuth, favoritesController.save)
export { router }