- Vamos começar adicionando um método getTopTenNewest no serviço para obter os 10 cursos mais recentes no banco de dados:
- Obs.: A quantidade de 10 cursos foi escolhida arbitrariamente, mas poderia facilmente ser um valor determinado na requisição para deixar o comportamento mais controlável.
// src/services/courseService.ts
// ...
},
getTopTenNewest: async () => {
const courses = await Course.findAll({
limit: 10,
order: [['created_at', 'DESC']]
})
return courses
}
}
- Agora criamos um método no controlador para retornar a resposta:
// src/controllers/coursesController.ts
// ...
// GET /courses/newest
newest: async (req: Request, res: Response) => {
try {
const newestCourses = await courseService.getTopTenNewest()
return res.json(newestCourses)
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
}
}
- E por fim criamos a rota passando o método do controlador:
- Obs.: Como já temos uma rota com parâmetro começando em /courses é imprescindível que a rota newest fique acima dela, para que “featured” não seja entendido com um valor do parâmetro :id ao chamar a rota.
// src/routes.ts
import express from 'express'
import { categoriesController } from './controllers/categoriesController'
import { coursesController } from './controllers/coursesController'
const router = express.Router()
// ...
router.get('/courses/featured', coursesController.featured)
router.get('/courses/newest', coursesController.newest)
router.get('/courses/:id', coursesController.show)
export { router }
- Teste a rota e verifique que os 10 últimos cursos a serem cadastrados no banco de dados são retornados a cada requisição.