Есть роут
site.ru/api/users
Изначально роут выглядел так
router.get('/', async (req: Req, res: Response): Promise<void> => {
await UserModel.readAll()
.then(data => res.status(200).json(data))
.catch(() => res.status(400).json(null))
})
Но после решил добавить выборку для пагинации
router.get('/', async (req: Req, res: Response): Promise<void> => {
const { offset } = req.query
const { limit } = req.query
await UserModel.readAll(limit, offset)
.then(data => res.status(200).json(data))
.catch(() => res.status(400).json(null))
})
И метод стал уже выглядеть слишком широко и как будто немного запутанно из-за дополнительной зоны ответственности
static async readAll(limit, offset): Promise<QueryResult> {
if(limit && offset) {
const data = await DataBase.query(`SELECT * from users ORDER BY id LIMIT ${+limit} OFFSET ${+offset}`)
.then(data => data.rows)
.catch(err => {
throw new Error(err.message)
})
const count = await DataBase.query(`SELECT COUNT(*) from users`)
.then(data => data.rows[0]?.count)
.catch(err => {
throw new Error(err.message)
})
return { data, count }
}
return await DataBase.query(`SELECT * from users`)
.then(data => data.rows)
.catch(err => {
throw new Error(err.message)
})
}
Как правильно настраиваются роуты подобного типа?