From a1569b181845a8d0543d4147d65ce00cbb799fc7 Mon Sep 17 00:00:00 2001 From: Jack Meyer Date: Sun, 5 Apr 2020 20:41:11 -0500 Subject: [PATCH] feat: remove paging stuff --- src/clients/db/Page.ts | 48 -------------------- src/clients/db/PageRequest.ts | 10 ----- src/clients/db/Repository.ts | 83 ----------------------------------- 3 files changed, 141 deletions(-) delete mode 100644 src/clients/db/Page.ts delete mode 100644 src/clients/db/PageRequest.ts diff --git a/src/clients/db/Page.ts b/src/clients/db/Page.ts deleted file mode 100644 index 2cd63ff25f..0000000000 --- a/src/clients/db/Page.ts +++ /dev/null @@ -1,48 +0,0 @@ -export default class Page { - /** the content for this page */ - content: T[] - - /** the total number of elements that match the search */ - totalElements: number - - /** the size of the current page */ - size: number - - /** the current page number */ - number: number - - getNextPage?: () => Promise> - - getPreviousPage?: () => Promise> - - constructor(content: T[], totalElements: number, size: number, number: number) { - this.content = content - this.totalElements = totalElements - this.size = size - this.number = number - } - - getContent(): T[] { - return this.content - } - - getTotalElements(): number { - return this.totalElements - } - - getSize(): number { - return this.size - } - - getNumber(): number { - return this.number - } - - hasNext(): boolean { - return this.getNextPage !== undefined - } - - hasPrevious(): boolean { - return this.getPreviousPage !== undefined - } -} diff --git a/src/clients/db/PageRequest.ts b/src/clients/db/PageRequest.ts deleted file mode 100644 index 96870d387b..0000000000 --- a/src/clients/db/PageRequest.ts +++ /dev/null @@ -1,10 +0,0 @@ -export default interface PageRequest { - /** the page number requested */ - number: number - /** the size of the pages */ - size: number - - startKey?: string - - previousStartKeys?: string[] -} diff --git a/src/clients/db/Repository.ts b/src/clients/db/Repository.ts index 8b1681ab1d..18dfa6ab90 100644 --- a/src/clients/db/Repository.ts +++ b/src/clients/db/Repository.ts @@ -1,8 +1,6 @@ /* eslint "@typescript-eslint/camelcase": "off" */ import { v4 as uuidv4 } from 'uuid' import AbstractDBModel from '../../model/AbstractDBModel' -import PageRequest from './PageRequest' -import Page from './Page' import SortRequest, { Unsorted } from './SortRequest' function mapDocument(document: any): any { @@ -34,14 +32,6 @@ export default class Repository { return this.search({ selector }, sort) } - async pagedFindAll(pageRequest: PageRequest, sortRequest = Unsorted): Promise> { - return this.pagedSearch( - { selector: { _id: { $gt: pageRequest?.startKey } } }, - pageRequest, - sortRequest, - ) - } - async search(criteria: any, sort: SortRequest = Unsorted): Promise { // hack to get around the requirement that any sorted field must be in the selector list sort.sorts.forEach((s) => { @@ -55,79 +45,6 @@ export default class Repository { return response.docs.map(mapDocument) } - async pagedSearch( - criteria: any, - pageRequest: PageRequest, - sortRequest = Unsorted, - ): Promise> { - // eslint-disable-next-line - criteria.selector._id = { $gt: pageRequest?.startKey } - criteria.selector.requestedOn = { $gt: null } - const allCriteria = { - ...criteria, - limit: pageRequest?.size, - // if the page request has a start key included, then do not use skip due to its performance drawbacks - // documented here: https://pouchdb.com/2014/04/14/pagination-strategies-with-pouchdb.html - // if the start key was provided, make the skip 1. This will get the next document after the one with the given id defined - // by the start key - skip: pageRequest && !pageRequest.startKey ? pageRequest.size * pageRequest.number : 1, - sort: sortRequest.sorts.length > 0 ? sortRequest.sorts.map((s) => s.field) : undefined, - } - - const info = await this.db.allDocs({ limit: 0 }) - const result = await this.db.find(allCriteria) - - const rows = result.docs.map(mapDocument) - const page = new Page(rows, info.total_rows, rows.length, pageRequest.number) - - const lastPageNumber = - Math.floor(info.total_rows / pageRequest.size) + (info.total_rows % pageRequest.size) - - // if it's not the last page, calculate the next page - if (lastPageNumber !== pageRequest.number + 1) { - // add the current start key to the previous start keys list - // this is to keep track of the previous start key in order to do "linked list paging" - // for performance reasons - // the current page's start key will become the previous start key - const previousStartKeys = pageRequest.previousStartKeys || [] - if (pageRequest.startKey) { - previousStartKeys.push(pageRequest.startKey) - } - - page.getNextPage = async () => - this.pagedSearch( - criteria, - { - size: pageRequest.size, - // the start key is the last row returned on the current page - startKey: rows[rows.length - 1].id, - previousStartKeys, - number: pageRequest.number + 1, - }, - sortRequest, - ) as Promise> - } - - // if it's not the first page, calculate the previous page - if (pageRequest.number !== 0) { - // pop a start key off the list to get the previous start key - const previousStartKey = pageRequest.previousStartKeys?.pop() - page.getPreviousPage = async () => - this.pagedSearch( - criteria, - { - size: pageRequest.size, - number: pageRequest.number - 1, - startKey: previousStartKey, - previousStartKeys: pageRequest.previousStartKeys, - }, - sortRequest, - ) as Promise> - } - - return page - } - async save(entity: T): Promise { const currentTime = new Date().toISOString()