Closed jordidh closed 1 year ago
Artícle interessant sobre paginació i filtres: https://medium.com/@bhkfazano/how-to-create-paginated-sortable-and-filterable-endpoints-with-nestjs-fde6315c8466
Estudiar fer servir el patró "decorators" per parsejar els res.query en objectes pagination, filter i sort. Veure https://www.sitepoint.com/javascript-decorators-what-they-are/
Idea:
Enlloc de cridar a
containers = await containerService.getClientContainers(req.query.clientId, req.query.skip, req.query.limit);
cridar
containers = await @parsePagSortFilter containerService.getClientContainers(req);
Per això hem de crear un decorator que agafi el req.query i n'extregui objectes de paginació, filtrat i ordenat, ex:
function parsePagSortFilter(target, name, descriptor) {
const original = descriptor.value;
if (typeof original === 'function') {
descriptor.value = function(...args) {
console.log(`Arguments: ${args}`);
try {
// TODO: extract objects from req.query
// Call the function
const result = original.apply(this, args);
console.log(`Result: ${result}`);
// Return the result
return result;
} catch (e) {
console.log(`Error: ${e}`);
throw e;
}
}
}
return descriptor;
}
Quines url han de poder acceptar?
Implementar ok
Paginació
Permetre passar en el camp query de la URL de les API dades amb paginació per poder construir una SQL que recuperi només el que es demana. Exemple, en MySql es fa:
URL:
http://localhost:8080/v1/container?skip=0&limit=200
Filtrat
Permetre passar en el camp query de la URL de les API dades amb filtres per seleccionar quines dades volem.
URL:
http://localhost:8080/v1/container?skip=0&limit=200&filter=id:eq:1,code:isnotnull
Ordenació
Permetre passar en el camp query de la URL de les API dades amb l'ordre amb que volem recuperar les dades.
URL:
http://localhost:8080/v1/container?skip=0&limit=200&sort=id:asc,code:desc