feat: page sort support

This commit is contained in:
Innei
2021-09-28 21:22:28 +08:00
parent b7b3271580
commit 8537b050b4
2 changed files with 19 additions and 3 deletions

View File

@@ -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,8 +26,8 @@ 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(
{},
@@ -35,6 +35,7 @@ export class PageController {
limit: size,
page,
select,
sort: sortBy ? { [sortBy]: sortOrder || -1 } : { modified: -1 },
},
)
}

View File

@@ -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
}