Skip to content

Commit

Permalink
feat: page sort support
Browse files Browse the repository at this point in the history
Innei committed Sep 28, 2021
1 parent b7b3271 commit 8537b05
Showing 2 changed files with 19 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/modules/page/page.controller.ts
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ import { Paginator } from '~/common/decorator/http.decorator'
import { ApiName } from '~/common/decorator/openapi.decorator'
import { CannotFindException } from '~/common/exceptions/cant-find.exception'
import { MongoIdDto } from '~/shared/dto/id.dto'
import { PagerDto } from '~/shared/dto/pager.dto'
import { PageQueryDto } from './page.dto'
import { PageModel, PartialPageModel } from './page.model'
import { PageService } from './page.service'

@@ -26,15 +26,16 @@ export class PageController {

@Get('/')
@Paginator
async getPagesSummary(@Query() query: PagerDto) {
const { size, select, page } = query
async getPagesSummary(@Query() query: PageQueryDto) {
const { size, select, page, sortBy, sortOrder } = query

return await this.pageService.model.paginate(
{},
{
limit: size,
page,
select,
sort: sortBy ? { [sortBy]: sortOrder || -1 } : { modified: -1 },
},
)
}
15 changes: 15 additions & 0 deletions src/modules/page/page.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Transform } from 'class-transformer'
import { IsEnum, IsOptional, ValidateIf } from 'class-validator'
import { PagerDto } from '~/shared/dto/pager.dto'

export class PageQueryDto extends PagerDto {
@IsOptional()
@IsEnum(['title', 'created', 'modified', 'order', 'subtitle'])
readonly sortBy?: string

@IsOptional()
@IsEnum([1, -1])
@ValidateIf((o) => o.sortBy)
@Transform(({ value: v }) => v | 0)
readonly sortOrder?: 1 | -1
}

0 comments on commit 8537b05

Please sign in to comment.