From 8b852c9f28525a73bd395d2914f1b26a1feba107 Mon Sep 17 00:00:00 2001 From: Oscar Date: Mon, 8 Jun 2026 14:29:40 +0300 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(cities):=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20DTO=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B3?= =?UTF-8?q?=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20=D0=B8=20=D1=80=D0=B0=D0=B9?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✨ feat(greetings): добавляет схему для тела запроса при добавлении фразы приветствия ✨ feat(auth): добавляет схему для тела запроса при обновлении FCM токена ✨ feat(tags): добавляет схему для тела запроса при создании тега --- src/auth/auth.controller.ts | 3 ++- src/modules/cities/cities.controller.ts | 5 +++-- src/modules/cities/dto/create-city.dto.ts | 17 +++++++++++++++++ src/modules/greetings/greetings.controller.ts | 3 ++- src/modules/tags/tags.controller.ts | 3 ++- 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 src/modules/cities/dto/create-city.dto.ts diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 6dd55ae..ab188b8 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { AuthService } from './auth.service'; import { LoginDto } from './dto/login.dto'; import { RefreshTokenDto } from './dto/refresh-token.dto'; @@ -52,6 +52,7 @@ export class AuthController { @Post('fcm-token') @ApiBearerAuth() @ApiOperation({ summary: 'Update FCM push token' }) + @ApiBody({ schema: { type: 'object', properties: { fcmToken: { type: 'string', example: 'firebase-token-abc123' } }, required: ['fcmToken'] } }) @ApiResponse({ status: 201, type: MessageResponseDto }) updateFcmToken( @CurrentUser('id') userId: string, diff --git a/src/modules/cities/cities.controller.ts b/src/modules/cities/cities.controller.ts index 80d2b72..6bb8d9e 100644 --- a/src/modules/cities/cities.controller.ts +++ b/src/modules/cities/cities.controller.ts @@ -6,6 +6,7 @@ import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { RolesGuard } from '../../common/guards/roles.guard'; import { CitiesService } from './cities.service'; import { CityResponseDto, DistrictResponseDto } from './dto/city-response.dto'; +import { CreateCityDto, CreateDistrictDto } from './dto/create-city.dto'; @ApiTags('cities') @Controller('cities') @@ -34,7 +35,7 @@ export class CitiesController { @Post() @ApiOperation({ summary: 'Create city (admin only)' }) @ApiResponse({ status: 201, type: CityResponseDto }) - createCity(@Body() body: { name: string; lat: number; lng: number }) { + createCity(@Body() body: CreateCityDto) { return this.citiesService.createCity(body.name, body.lat, body.lng); } @@ -44,7 +45,7 @@ export class CitiesController { @Post(':cityId/districts') @ApiOperation({ summary: 'Create district (admin only)' }) @ApiResponse({ status: 201, type: DistrictResponseDto }) - createDistrict(@Param('cityId') cityId: string, @Body() body: { name: string }) { + createDistrict(@Param('cityId') cityId: string, @Body() body: CreateDistrictDto) { return this.citiesService.createDistrict(cityId, body.name); } } diff --git a/src/modules/cities/dto/create-city.dto.ts b/src/modules/cities/dto/create-city.dto.ts new file mode 100644 index 0000000..5a6eb44 --- /dev/null +++ b/src/modules/cities/dto/create-city.dto.ts @@ -0,0 +1,17 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class CreateCityDto { + @ApiProperty({ example: 'Москва' }) + name: string; + + @ApiProperty({ example: 55.7558 }) + lat: number; + + @ApiProperty({ example: 37.6173 }) + lng: number; +} + +export class CreateDistrictDto { + @ApiProperty({ example: 'Центральный' }) + name: string; +} diff --git a/src/modules/greetings/greetings.controller.ts b/src/modules/greetings/greetings.controller.ts index c795ae8..17a3831 100644 --- a/src/modules/greetings/greetings.controller.ts +++ b/src/modules/greetings/greetings.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { Public } from '../../common/decorators/public.decorator'; import { Roles } from '../../common/decorators/roles.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; @@ -26,6 +26,7 @@ export class GreetingsController { @Roles('admin') @Post() @ApiOperation({ summary: 'Add greeting phrase (admin only)' }) + @ApiBody({ schema: { type: 'object', properties: { text: { type: 'string', example: 'Привет!' } }, required: ['text'] } }) @ApiResponse({ status: 201, type: GreetingDto }) create(@Body('text') text: string) { return this.greetingsService.create(text); diff --git a/src/modules/tags/tags.controller.ts b/src/modules/tags/tags.controller.ts index 20b6fad..cf0cebc 100644 --- a/src/modules/tags/tags.controller.ts +++ b/src/modules/tags/tags.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { Public } from '../../common/decorators/public.decorator'; import { Roles } from '../../common/decorators/roles.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; @@ -26,6 +26,7 @@ export class TagsController { @Roles('admin') @Post() @ApiOperation({ summary: 'Create tag (admin only)' }) + @ApiBody({ schema: { type: 'object', properties: { value: { type: 'string', example: 'Спорт' } }, required: ['value'] } }) @ApiResponse({ status: 201, type: TagResponseDto }) create(@Body('value') value: string) { return this.tagsService.create(value);