From f5d48fc638080c9333efe474d86f131794c809af Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 18:28:55 +0200 Subject: [PATCH] Added pagination for donations ref #205 --- src/controllers/DonationController.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/controllers/DonationController.ts b/src/controllers/DonationController.ts index 9401694..9636000 100644 --- a/src/controllers/DonationController.ts +++ b/src/controllers/DonationController.ts @@ -1,6 +1,6 @@ import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; -import { getConnectionManager, Repository } from 'typeorm'; +import { Repository, getConnectionManager } from 'typeorm'; import { DonationIdsNotMatchingError, DonationNotFoundError } from '../errors/DonationErrors'; import { DonorNotFoundError } from '../errors/DonorErrors'; import { RunnerNotFoundError } from '../errors/RunnerErrors'; @@ -36,9 +36,16 @@ export class DonationController { @ResponseSchema(ResponseDonation, { isArray: true }) @ResponseSchema(ResponseDistanceDonation, { isArray: true }) @OpenAPI({ description: 'Lists all donations (fixed or distance based) from all donors.
This includes the donations\'s runner\'s distance ran(if distance donation).' }) - async getAll() { + async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) { let responseDonations: ResponseDonation[] = new Array(); - const donations = await this.donationRepository.find({ relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] }); + let donations: Array; + + if (page) { + donations = await this.donationRepository.find({ relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'], skip: page * page_size, take: page_size }); + } else { + donations = await this.donationRepository.find({ relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] }); + } + donations.forEach(donation => { responseDonations.push(donation.toResponse()); });