From 4493c0e3d9beebbf7f601b39e1a2579771b4d152 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 18:30:20 +0200 Subject: [PATCH] Added pagination for get all donors ref #205 --- src/controllers/DonorController.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/controllers/DonorController.ts b/src/controllers/DonorController.ts index 4b0d508..577ffc1 100644 --- a/src/controllers/DonorController.ts +++ b/src/controllers/DonorController.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 { DonorHasDonationsError, DonorIdsNotMatchingError, DonorNotFoundError } from '../errors/DonorErrors'; import { CreateDonor } from '../models/actions/create/CreateDonor'; import { UpdateDonor } from '../models/actions/update/UpdateDonor'; @@ -25,9 +25,16 @@ export class DonorController { @Authorized("DONOR:GET") @ResponseSchema(ResponseDonor, { isArray: true }) @OpenAPI({ description: 'Lists all donor.
This includes the donor\'s current donation amount.' }) - async getAll() { + async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) { let responseDonors: ResponseDonor[] = new Array(); - const donors = await this.donorRepository.find({ relations: ['donations', 'donations.runner', 'donations.runner.scans', 'donations.runner.scans.track'] }); + let donors: Array; + + if (page) { + donors = await this.donorRepository.find({ relations: ['donations', 'donations.runner', 'donations.runner.scans', 'donations.runner.scans.track'], skip: page * page_size, take: page_size }); + } else { + donors = await this.donorRepository.find({ relations: ['donations', 'donations.runner', 'donations.runner.scans', 'donations.runner.scans.track'] }); + } + donors.forEach(donor => { responseDonors.push(new ResponseDonor(donor)); });