// src/services/likeService.ts
// ...
},
isLiked: async (userId: number, courseId: number) => {
const like = await Like.findOne({
where: {
userId,
courseId
}
})
return like !== null ? true : false
}
}
Com o método pronto, só precisamos atualizar o controlador de cursos para incluir a propriedade booleana liked na resposta:
Obs.: Repare que podemos obter o userId para verificar se o usuário atual gostou do curso através do middleware de autenticação que salva o user na requisição.
// src/controllers/coursesController.ts
// ...
import { likeService } from '../services/likeService'
export const coursesController = {
// ...
// GET /courses/:id
show: async (req: AuthenticatedRequest, res: Response) => {
const userId = req.user!.id
const courseId = req.params.id
try {
const course = await courseService.findByIdWithEpisodes(courseId)
if (!course) return res.status(404).json({ message: 'Curso não encontrado' })
const liked = await likeService.isLiked(userId, Number(courseId))
return res.json({ ...course.get(), favorited, liked })
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
}
// ...
// src/services/favoriteService.ts
import { Favorite } from "../models"
export const favoriteService = {
isFavorited: async (userId: number, courseId: number) => {
const favorite = await Favorite.findOne({
where: {
userId,
courseId
}
})
return favorite !== null
}
// ...
// src/controllers/coursesController.ts
// ...
import { favoriteService } from '../services/favoriteService'
import { likeService } from '../services/likeService'
export const coursesController = {
// ...
// GET /courses/:id
show: async (req: AuthenticatedRequest, res: Response) => {
const userId = req.user!.id
const courseId = req.params.id
try {
const course = await courseService.findByIdWithEpisodes(courseId)
if (!course) return res.status(404).json({ message: 'Curso não encontrado' })
const liked = await likeService.isLiked(userId, Number(courseId))
const favorited = await favoriteService.isFavorited(userId, Number(courseId))
return res.json({ ...course.get(), favorited, liked })
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
}
// ...