feat: 数据验证和数据序列化处理

- 增加了DTO和验证
 - 服务类和控制器加入了dto
 - 增加序列化拦截器,对数组和分页特殊处理
 - 实体中分配了序列化装饰器
 - 控制器引入拦截器
This commit is contained in:
2023-11-22 18:50:56 +08:00
parent db1fcf05bc
commit ef90d0550b
10 changed files with 182 additions and 45 deletions
@@ -8,34 +8,50 @@ import {
Patch,
Post,
Query,
SerializeOptions,
UseInterceptors,
ValidationPipe,
} from '@nestjs/common';
import { CreatePostDto, UpdatePostDto } from '@/modules/content/dtos';
import { PostService } from '@/modules/content/services';
import { AppIntercepter } from '@/modules/core/providers';
import { PaginateOptions } from '@/modules/database/types';
/**
* 文章控制器
* 负责处理与文章相关的请求,如获取文章列表、创建新文章等。
*/
@UseInterceptors(AppIntercepter)
@Controller('posts')
export class PostController {
constructor(private postService: PostService) {}
@Get()
@SerializeOptions({ groups: ['post-list'] })
async list(
@Query()
@Query(
new ValidationPipe({
transform: true,
whitelist: true,
forbidNonWhitelisted: true,
forbidUnknownValues: true,
validationError: { target: false },
}),
)
options: PaginateOptions,
) {
return this.postService.paginate(options);
}
@Get(':id')
@SerializeOptions({ groups: ['post-detail'] })
async detail(@Param('id', new ParseUUIDPipe()) id: string) {
return this.postService.detail(id);
}
@Post()
@SerializeOptions({ groups: ['post-detail'] })
async store(
@Body(
new ValidationPipe({
@@ -46,12 +62,13 @@ export class PostController {
groups: ['create'],
}),
)
data: RecordAny,
data: CreatePostDto,
) {
return this.postService.create(data);
}
@Patch()
@SerializeOptions({ groups: ['post-detail'] })
async update(
@Body(
new ValidationPipe({
@@ -62,12 +79,13 @@ export class PostController {
groups: ['update'],
}),
)
data: RecordAny,
data: UpdatePostDto,
) {
return this.postService.update(data);
}
@Delete(':id')
@SerializeOptions({ groups: ['post-detail'] })
async delete(@Param('id', new ParseUUIDPipe()) id: string) {
return this.postService.delete(id);
}