mirror of
https://github.com/Floriansylvain/CineAllo.git
synced 2026-08-19 11:43:24 +02:00
Added pagination to show GET route
This commit is contained in:
+23
-3
@@ -25,9 +25,18 @@ function pushOrderByToFilter(filter, valueOrderPair) {
|
|||||||
filter.orderBy[valueOrderPair.value] = valueOrderPair.order
|
filter.orderBy[valueOrderPair.value] = valueOrderPair.order
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseNumberFromQuery(query) {
|
||||||
|
const parsedQuery = parseInt(query)
|
||||||
|
if (isNaN(parsedQuery)) return undefined;
|
||||||
|
return parsedQuery
|
||||||
|
}
|
||||||
|
|
||||||
showsRouter.get('/', function (req, res, next) {
|
showsRouter.get('/', function (req, res, next) {
|
||||||
const queries = req.query
|
const queries = req.query
|
||||||
const filter = {}
|
const filter = {
|
||||||
|
skip: parseNumberFromQuery(queries['start']) ?? 0,
|
||||||
|
take: parseNumberFromQuery(queries['per_page']) ?? 10
|
||||||
|
}
|
||||||
|
|
||||||
pushOrderByToFilter(filter, { value: queries?.sort_asc, order: 'asc' })
|
pushOrderByToFilter(filter, { value: queries?.sort_asc, order: 'asc' })
|
||||||
pushOrderByToFilter(filter, { value: queries?.sort_desc, order: 'desc' })
|
pushOrderByToFilter(filter, { value: queries?.sort_desc, order: 'desc' })
|
||||||
@@ -39,10 +48,21 @@ showsRouter.get('/', function (req, res, next) {
|
|||||||
pushQueryToFilter(filter, { key: 'likes', value: queries?.likes, query: 'equals' })
|
pushQueryToFilter(filter, { key: 'likes', value: queries?.likes, query: 'equals' })
|
||||||
|
|
||||||
prisma.serie.findMany(filter)
|
prisma.serie.findMany(filter)
|
||||||
.then(shows => res.send({ shows }))
|
.then(shows => res.send({
|
||||||
|
shows,
|
||||||
|
pagination: {
|
||||||
|
start: filter.skip,
|
||||||
|
per_page: filter.take
|
||||||
|
},
|
||||||
|
links: {
|
||||||
|
next: `/v1/shows?start=${filter.skip + filter.take}&per_page=${filter.take}`,
|
||||||
|
prev: `/v1/shows?start=${Math.max(0, filter.skip - filter.take)}&per_page=${filter.take}`
|
||||||
|
},
|
||||||
|
total: shows.length
|
||||||
|
}))
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
if (error instanceof Prisma.PrismaClientValidationError) {
|
if (error instanceof Prisma.PrismaClientValidationError) {
|
||||||
next(createHttpError(400, 'Incorrect field in sort query.'))
|
next(createHttpError(400, 'Incorrect field in sort query: ' + error))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user