From 538622aa1841e27256f304e15b4204c2f6d24d76 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 18:37:09 +0200 Subject: [PATCH] Added pagination for runner orgs ref #205 --- .../RunnerOrganizationController.ts | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/controllers/RunnerOrganizationController.ts b/src/controllers/RunnerOrganizationController.ts index 5cf4183..32bc508 100644 --- a/src/controllers/RunnerOrganizationController.ts +++ b/src/controllers/RunnerOrganizationController.ts @@ -1,6 +1,6 @@ import { Authorized, BadRequestError, 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 { RunnerOrganizationHasRunnersError, RunnerOrganizationHasTeamsError, RunnerOrganizationIdsNotMatchingError, RunnerOrganizationNotFoundError } from '../errors/RunnerOrganizationErrors'; import { CreateRunnerOrganization } from '../models/actions/create/CreateRunnerOrganization'; import { UpdateRunnerOrganization } from '../models/actions/update/UpdateRunnerOrganization'; @@ -29,13 +29,20 @@ export class RunnerOrganizationController { @Authorized("ORGANIZATION:GET") @ResponseSchema(ResponseRunnerOrganization, { isArray: true }) @OpenAPI({ description: 'Lists all organizations.
This includes their address, contact and teams (if existing/associated).' }) - async getAll() { - let responseTeams: ResponseRunnerOrganization[] = new Array(); - const runners = await this.runnerOrganizationRepository.find({ relations: ['contact', 'teams'] }); - runners.forEach(runner => { - responseTeams.push(new ResponseRunnerOrganization(runner)); + async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) { + let responseOrgs: ResponseRunnerOrganization[] = new Array(); + let orgs: Array; + + if (page) { + orgs = await this.runnerOrganizationRepository.find({ relations: ['contact', 'teams'], skip: page * page_size, take: page_size }); + } else { + orgs = await this.runnerOrganizationRepository.find({ relations: ['contact', 'teams'] }); + } + + orgs.forEach(org => { + responseOrgs.push(new ResponseRunnerOrganization(org)); }); - return responseTeams; + return responseOrgs; } @Get('/:id')