From 552cbf2e573e549355548b7d828412219d4d4065 Mon Sep 17 00:00:00 2001 From: liuyi Date: Wed, 21 May 2025 22:47:16 +0800 Subject: [PATCH] add controller --- src/modules/content/constants.ts | 8 +++ .../controllers/category.controller.ts | 23 ++----- .../content/controllers/post.controller.ts | 24 ++----- .../content/controllers/tag.controller.ts | 65 +++++++++++++++++++ 4 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 src/modules/content/controllers/tag.controller.ts diff --git a/src/modules/content/constants.ts b/src/modules/content/constants.ts index 4ea2539..c91b47e 100644 --- a/src/modules/content/constants.ts +++ b/src/modules/content/constants.ts @@ -10,3 +10,11 @@ export enum PostOrder { COMMENTCOUNT = 'commentCount', CUSTOM = 'custom', } + +export const DEFAULT_VALIDATION_CONFIG = Object.freeze({ + transform: true, + whitelist: true, + forbidNonWhitelisted: true, + forbidUnknownValues: true, + validationError: { target: false }, +}); diff --git a/src/modules/content/controllers/category.controller.ts b/src/modules/content/controllers/category.controller.ts index 2ebdd68..6c0f3c5 100644 --- a/src/modules/content/controllers/category.controller.ts +++ b/src/modules/content/controllers/category.controller.ts @@ -15,6 +15,7 @@ import { import { AppInterceptor } from '@/modules/core/providers/app.interceptor'; +import { DEFAULT_VALIDATION_CONFIG } from '../constants'; import { CreateCategoryDto, QueryCategoryDto, UpdateCategoryDto } from '../dtos/category.dto'; import { CategoryService } from '../services'; @@ -32,15 +33,7 @@ export class CategoryController { @Get() @SerializeOptions({ groups: ['category-list'] }) async list( - @Query( - new ValidationPipe({ - transform: true, - whitelist: true, - forbidNonWhitelisted: true, - forbidUnknownValues: true, - validationError: { target: false }, - }), - ) + @Query(new ValidationPipe(DEFAULT_VALIDATION_CONFIG)) options: QueryCategoryDto, ) { return this.service.paginate(options); @@ -57,11 +50,7 @@ export class CategoryController { async store( @Body( new ValidationPipe({ - transform: true, - whitelist: true, - forbidNonWhitelisted: true, - forbidUnknownValues: true, - validationError: { target: false }, + ...DEFAULT_VALIDATION_CONFIG, groups: ['create'], }), ) @@ -75,11 +64,7 @@ export class CategoryController { async update( @Body( new ValidationPipe({ - transform: true, - whitelist: true, - forbidNonWhitelisted: true, - forbidUnknownValues: true, - validationError: { target: false }, + ...DEFAULT_VALIDATION_CONFIG, groups: ['update'], }), ) diff --git a/src/modules/content/controllers/post.controller.ts b/src/modules/content/controllers/post.controller.ts index efd2284..a2cd49e 100644 --- a/src/modules/content/controllers/post.controller.ts +++ b/src/modules/content/controllers/post.controller.ts @@ -17,6 +17,8 @@ import { CreatePostDto, QueryPostDto, UpdatePostDto } from '@/modules/content/dt import { PostService } from '@/modules/content/services/post.service'; import { AppInterceptor } from '@/modules/core/providers/app.interceptor'; +import { DEFAULT_VALIDATION_CONFIG } from '../constants'; + @UseInterceptors(AppInterceptor) @Controller('posts') export class PostController { @@ -25,15 +27,7 @@ export class PostController { @Get() @SerializeOptions({ groups: ['post-list'] }) async list( - @Query( - new ValidationPipe({ - transform: true, - whitelist: true, - forbidUnknownValues: true, - forbidNonWhitelisted: true, - validationError: { target: false }, - }), - ) + @Query(new ValidationPipe(DEFAULT_VALIDATION_CONFIG)) options: QueryPostDto, ) { return this.postService.paginate(options); @@ -50,11 +44,7 @@ export class PostController { async store( @Body( new ValidationPipe({ - transform: true, - whitelist: true, - forbidUnknownValues: true, - forbidNonWhitelisted: true, - validationError: { target: false }, + ...DEFAULT_VALIDATION_CONFIG, groups: ['create'], }), ) @@ -68,11 +58,7 @@ export class PostController { async update( @Body( new ValidationPipe({ - transform: true, - whitelist: true, - forbidUnknownValues: true, - forbidNonWhitelisted: true, - validationError: { target: false }, + ...DEFAULT_VALIDATION_CONFIG, groups: ['update'], }), ) diff --git a/src/modules/content/controllers/tag.controller.ts b/src/modules/content/controllers/tag.controller.ts new file mode 100644 index 0000000..5280d2a --- /dev/null +++ b/src/modules/content/controllers/tag.controller.ts @@ -0,0 +1,65 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseUUIDPipe, + Patch, + Post, + Query, + SerializeOptions, + UseInterceptors, + ValidationPipe, +} from '@nestjs/common'; + +import { AppInterceptor } from '@/modules/core/providers/app.interceptor'; + +import { DEFAULT_VALIDATION_CONFIG } from '../constants'; +import { CreateTagDto, QueryTagDto, UpdateTagDto } from '../dtos/tag.dto'; +import { TagService } from '../services'; + +@Controller('tag') +@UseInterceptors(AppInterceptor) +export class TagController { + constructor(protected service: TagService) {} + + @Get() + @SerializeOptions({}) + async list( + @Query(new ValidationPipe(DEFAULT_VALIDATION_CONFIG)) + options: QueryTagDto, + ) { + return this.service.paginate(options); + } + + @Get(':id') + @SerializeOptions({}) + async detail(@Param('id', new ParseUUIDPipe()) id: string) { + return this.service.detail(id); + } + + @Post() + @SerializeOptions({}) + async store( + @Body(new ValidationPipe({ ...DEFAULT_VALIDATION_CONFIG, groups: ['create'] })) + data: CreateTagDto, + ) { + return this.service.create(data); + } + + @Patch() + @SerializeOptions({}) + async update( + @Body(new ValidationPipe({ ...DEFAULT_VALIDATION_CONFIG, groups: ['update'] })) + date: UpdateTagDto, + ) { + return this.service.update(date); + } + + @Delete(':id') + @SerializeOptions({}) + async delete(@Param('id', new ParseUUIDPipe()) id: string) { + return this.service.delete(id); + } +}