feat: page sort support
This commit is contained in:
@@ -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 },
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
15
src/modules/page/page.dto.ts
Normal file
15
src/modules/page/page.dto.ts
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user