mirror of
https://github.com/docmost/docmost.git
synced 2025-11-17 22:51:11 +10:00
pagination - wip
This commit is contained in:
14
apps/server/src/helpers/pagination/paginated-result.ts
Normal file
14
apps/server/src/helpers/pagination/paginated-result.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { IsArray } from 'class-validator';
|
||||
import { PaginationMetaDto } from './pagination-meta-dto';
|
||||
|
||||
export class PaginatedResult<T> {
|
||||
@IsArray()
|
||||
readonly items: T[];
|
||||
|
||||
readonly pagination: PaginationMetaDto;
|
||||
|
||||
constructor(items: T[], pagination: PaginationMetaDto) {
|
||||
this.items = items;
|
||||
this.pagination = pagination;
|
||||
}
|
||||
}
|
||||
29
apps/server/src/helpers/pagination/pagination-meta-dto.ts
Normal file
29
apps/server/src/helpers/pagination/pagination-meta-dto.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { PaginationOptions } from './pagination-options';
|
||||
|
||||
export class PaginationMetaDto {
|
||||
readonly page: number;
|
||||
|
||||
readonly limit: number;
|
||||
|
||||
readonly total: number;
|
||||
|
||||
readonly pageCount: number;
|
||||
|
||||
readonly hasPreviousPage: boolean;
|
||||
|
||||
readonly hasNextPage: boolean;
|
||||
|
||||
constructor({ count, paginationOptions }: PageMetaDtoParameters) {
|
||||
this.page = paginationOptions.page;
|
||||
this.limit = paginationOptions.limit;
|
||||
this.total = count;
|
||||
this.pageCount = Math.ceil(this.total / this.limit);
|
||||
this.hasPreviousPage = this.page > 1;
|
||||
this.hasNextPage = this.page < this.pageCount;
|
||||
}
|
||||
}
|
||||
|
||||
export interface PageMetaDtoParameters {
|
||||
count: number;
|
||||
paginationOptions: PaginationOptions;
|
||||
}
|
||||
23
apps/server/src/helpers/pagination/pagination-options.ts
Normal file
23
apps/server/src/helpers/pagination/pagination-options.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import { IsNumber, IsOptional, IsPositive, Max, Min } from 'class-validator';
|
||||
|
||||
export class PaginationOptions {
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
@Min(1)
|
||||
page = 1;
|
||||
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
@IsPositive()
|
||||
@Min(1)
|
||||
@Max(100)
|
||||
limit = 25;
|
||||
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
offset = 0;
|
||||
|
||||
get skip(): number {
|
||||
return (this.page - 1) * this.limit;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user