From 1662bb7dc8bb086ee609ffe214cd236bb5c438ae Mon Sep 17 00:00:00 2001 From: Oscar Date: Mon, 8 Jun 2026 16:41:08 +0300 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(src/modules/greetings/greeting?= =?UTF-8?q?s.controller.ts):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=8B=20API=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=84=D1=80=D0=B0=D0=B7=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=E2=9C=A8=20?= =?UTF-8?q?feat(src/modules/likes/likes.controller.ts):=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D1=8B=20API=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=B0=D0=B9=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=BE=D0=B2=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=E2=9C=A8=20feat(src/auth/auth.controller.ts):?= =?UTF-8?q?=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=8B=20API=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8,=20=D0=B2=D1=85=D0=BE=D0=B4=D0=B0=20=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=E2=9C=A8=20feat(s?= =?UTF-8?q?rc/modules/media/media.controller.ts):=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D1=8B=20API=20=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=B0=20=E2=9C=A8=20feat(src/modules/users/users.controller.ts?= =?UTF-8?q?):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=8B=20API=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F=D0=BC=D0=B8=20=E2=9C=A8=20feat(src/modules/d?= =?UTF-8?q?ates/dto/dates-response.dto.ts):=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8F=D0=B5=D1=82=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=B0=20=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D1=8B=20=D0=BD=D0=B0=20dateStatus=20=E2=9C=A8=20feat(src?= =?UTF-8?q?/modules/cities/cities.controller.ts):=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D1=8B=20API=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B3=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=BE=D0=B2=20=D0=B8=20=D1=80=D0=B0=D0=B9=D0=BE=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=20=E2=9C=A8=20feat(src/modules/chat/chat.controlle?= =?UTF-8?q?r.ts):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=8B=20API=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=87=D0=B0=D1=82=D0=BE=D0=B2=20=D0=B8=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=E2=9C=A8=20feat(src/mod?= =?UTF-8?q?ules/reports/reports.controller.ts):=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D1=8B=20API=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=D1=87=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=E2=9C=A8=20feat(src/modules/feed/feed.controlle?= =?UTF-8?q?r.ts):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=83=20?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth.controller.ts | 12 ++++++------ src/modules/chat/chat.controller.ts | 12 ++++++------ src/modules/cities/cities.controller.ts | 10 +++++----- src/modules/dates/dates.controller.ts | 10 +++++----- src/modules/dates/dto/dates-response.dto.ts | 2 +- src/modules/feed/feed.controller.ts | 14 ++++++++++++-- src/modules/feed/feed.service.ts | 4 ++-- src/modules/greetings/greetings.controller.ts | 8 ++++---- src/modules/likes/likes.controller.ts | 6 +++--- src/modules/media/media.controller.ts | 8 ++++---- src/modules/profiles/profiles.controller.ts | 12 ++++++------ src/modules/reports/reports.controller.ts | 6 +++--- src/modules/tags/tags.controller.ts | 8 ++++---- src/modules/users/users.controller.ts | 10 +++++----- 14 files changed, 66 insertions(+), 56 deletions(-) diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index ab188b8..977bdb6 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, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { AuthService } from './auth.service'; import { LoginDto } from './dto/login.dto'; import { RefreshTokenDto } from './dto/refresh-token.dto'; @@ -18,7 +18,7 @@ export class AuthController { @Public() @Post('register') @ApiOperation({ summary: 'Register new user' }) - @ApiResponse({ status: 201, type: TokensResponseDto }) + @ApiCreatedResponse({ type: TokensResponseDto }) register(@Body() dto: RegisterDto) { return this.authService.register(dto); } @@ -26,7 +26,7 @@ export class AuthController { @Public() @Post('login') @ApiOperation({ summary: 'Login with phone and password' }) - @ApiResponse({ status: 201, type: TokensResponseDto }) + @ApiCreatedResponse({ type: TokensResponseDto }) login(@Body() dto: LoginDto) { return this.authService.login(dto); } @@ -35,7 +35,7 @@ export class AuthController { @Post('logout') @ApiBearerAuth() @ApiOperation({ summary: 'Logout current user' }) - @ApiResponse({ status: 201, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) logout(@CurrentUser('id') userId: string) { return this.authService.logout(userId); } @@ -43,7 +43,7 @@ export class AuthController { @Public() @Post('refresh') @ApiOperation({ summary: 'Refresh access token' }) - @ApiResponse({ status: 201, type: TokensResponseDto }) + @ApiCreatedResponse({ type: TokensResponseDto }) refresh(@Body() dto: RefreshTokenDto) { return this.authService.refreshTokens(dto.refreshToken); } @@ -53,7 +53,7 @@ export class AuthController { @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 }) + @ApiOkResponse({ type: MessageResponseDto }) updateFcmToken( @CurrentUser('id') userId: string, @Body('fcmToken') fcmToken: string, diff --git a/src/modules/chat/chat.controller.ts b/src/modules/chat/chat.controller.ts index 8d587a5..120fa33 100644 --- a/src/modules/chat/chat.controller.ts +++ b/src/modules/chat/chat.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Delete, Get, Param, Post, Query, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { ChatService } from './chat.service'; @@ -17,14 +17,14 @@ export class ChatController { @Post() @ApiOperation({ summary: 'Open a chat for a match' }) - @ApiResponse({ status: 201, type: ChatDto }) + @ApiCreatedResponse({ type: ChatDto }) createChat(@CurrentUser('id') userId: string, @Body() dto: CreateChatDto) { return this.chatService.createChat(userId, dto); } @Get() @ApiOperation({ summary: 'Get active chats for a profile' }) - @ApiResponse({ status: 200, type: [ChatDto] }) + @ApiOkResponse({ type: [ChatDto] }) getChats( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, @@ -36,7 +36,7 @@ export class ChatController { @ApiOperation({ summary: 'Get chat messages' }) @ApiQuery({ name: 'page', required: false, schema: { default: 1, type: 'number' } }) @ApiQuery({ name: 'limit', required: false, schema: { default: 50, type: 'number' } }) - @ApiResponse({ status: 200, type: [MessageDto] }) + @ApiOkResponse({ type: [MessageDto] }) getMessages( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, @@ -49,7 +49,7 @@ export class ChatController { @Post(':chatId/messages') @ApiOperation({ summary: 'Send a message' }) - @ApiResponse({ status: 201, type: MessageDto }) + @ApiCreatedResponse({ type: MessageDto }) sendMessage( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, @@ -61,7 +61,7 @@ export class ChatController { @Delete(':chatId') @ApiOperation({ summary: 'Close a chat' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) closeChat( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, diff --git a/src/modules/cities/cities.controller.ts b/src/modules/cities/cities.controller.ts index 6bb8d9e..4fa38d5 100644 --- a/src/modules/cities/cities.controller.ts +++ b/src/modules/cities/cities.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Get, Param, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, 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'; @@ -16,7 +16,7 @@ export class CitiesController { @Public() @Get() @ApiOperation({ summary: 'Get all cities' }) - @ApiResponse({ status: 200, type: [CityResponseDto] }) + @ApiOkResponse({ type: [CityResponseDto] }) findAll() { return this.citiesService.findAll(); } @@ -24,7 +24,7 @@ export class CitiesController { @Public() @Get(':cityId/districts') @ApiOperation({ summary: 'Get districts for a city' }) - @ApiResponse({ status: 200, type: [DistrictResponseDto] }) + @ApiOkResponse({ type: [DistrictResponseDto] }) findDistricts(@Param('cityId') cityId: string) { return this.citiesService.findDistricts(cityId); } @@ -34,7 +34,7 @@ export class CitiesController { @Roles('admin') @Post() @ApiOperation({ summary: 'Create city (admin only)' }) - @ApiResponse({ status: 201, type: CityResponseDto }) + @ApiCreatedResponse({ type: CityResponseDto }) createCity(@Body() body: CreateCityDto) { return this.citiesService.createCity(body.name, body.lat, body.lng); } @@ -44,7 +44,7 @@ export class CitiesController { @Roles('admin') @Post(':cityId/districts') @ApiOperation({ summary: 'Create district (admin only)' }) - @ApiResponse({ status: 201, type: DistrictResponseDto }) + @ApiCreatedResponse({ type: DistrictResponseDto }) createDistrict(@Param('cityId') cityId: string, @Body() body: CreateDistrictDto) { return this.citiesService.createDistrict(cityId, body.name); } diff --git a/src/modules/dates/dates.controller.ts b/src/modules/dates/dates.controller.ts index 6c91f73..8896efe 100644 --- a/src/modules/dates/dates.controller.ts +++ b/src/modules/dates/dates.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { DatesService } from './dates.service'; @@ -16,14 +16,14 @@ export class DatesController { @Post() @ApiOperation({ summary: 'Propose a meetup' }) - @ApiResponse({ status: 201, type: DateDto }) + @ApiCreatedResponse({ type: DateDto }) create(@CurrentUser('id') userId: string, @Body() dto: CreateDateDto) { return this.datesService.create(userId, dto); } @Get() @ApiOperation({ summary: 'Get dates for a profile' }) - @ApiResponse({ status: 200, type: [DateWithStatusDto] }) + @ApiOkResponse({ type: [DateWithStatusDto] }) getDates( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, @@ -33,7 +33,7 @@ export class DatesController { @Patch(':id/status') @ApiOperation({ summary: 'Update date status' }) - @ApiResponse({ status: 200, type: DateDto }) + @ApiOkResponse({ type: DateDto }) updateStatus( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, @@ -45,7 +45,7 @@ export class DatesController { @Get('statuses') @ApiOperation({ summary: 'Get available date statuses' }) - @ApiResponse({ status: 200, type: [DateStatusDto] }) + @ApiOkResponse({ type: [DateStatusDto] }) getStatuses() { return this.datesService.getStatuses(); } diff --git a/src/modules/dates/dto/dates-response.dto.ts b/src/modules/dates/dto/dates-response.dto.ts index eddc05f..3a80dac 100644 --- a/src/modules/dates/dto/dates-response.dto.ts +++ b/src/modules/dates/dto/dates-response.dto.ts @@ -17,5 +17,5 @@ export class DateDto { export class DateWithStatusDto { @ApiProperty({ type: DateDto }) date: DateDto; - @ApiPropertyOptional({ type: DateStatusDto, nullable: true }) date_status: DateStatusDto | null; + @ApiPropertyOptional({ type: DateStatusDto, nullable: true }) dateStatus: DateStatusDto | null; } diff --git a/src/modules/feed/feed.controller.ts b/src/modules/feed/feed.controller.ts index b1e62d7..e87e718 100644 --- a/src/modules/feed/feed.controller.ts +++ b/src/modules/feed/feed.controller.ts @@ -1,5 +1,5 @@ import { Controller, Get, Query, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiExtraModels, ApiOkResponse, ApiOperation, ApiTags, getSchemaPath } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { FeedFilterDto } from './dto/feed-filter.dto'; @@ -9,13 +9,23 @@ import { ProfileResponseDto } from '../profiles/dto/profile-response.dto'; @ApiTags('feed') @ApiBearerAuth() @UseGuards(JwtAuthGuard) +@ApiExtraModels(ProfileResponseDto) @Controller('feed') export class FeedController { constructor(private readonly feedService: FeedService) {} @Get() @ApiOperation({ summary: 'Get filtered feed (requires profileId)' }) - @ApiResponse({ status: 200, type: [ProfileResponseDto] }) + @ApiOkResponse({ + schema: { + properties: { + items: { type: 'array', items: { $ref: getSchemaPath(ProfileResponseDto) } }, + page: { type: 'number', example: 1 }, + limit: { type: 'number', example: 20 }, + }, + required: ['items', 'page', 'limit'], + }, + }) getFeed(@CurrentUser('id') userId: string, @Query() filter: FeedFilterDto) { return this.feedService.getFeed(userId, filter); } diff --git a/src/modules/feed/feed.service.ts b/src/modules/feed/feed.service.ts index b69ab29..43dbe0b 100644 --- a/src/modules/feed/feed.service.ts +++ b/src/modules/feed/feed.service.ts @@ -61,7 +61,7 @@ export class FeedService { .where(inArray(profileTag.tagId, tagIds)); const matchedIds = tagMatches.map((r) => r.profileId); - if (matchedIds.length === 0) return { data: [], page, limit }; + if (matchedIds.length === 0) return { items: [], page, limit }; conditions.push(inArray(profile.id, matchedIds)); } @@ -104,7 +104,7 @@ export class FeedService { }), ); - return { data: enriched, page, limit }; + return { items: enriched, page, limit }; } private calculateAge(birthDate: string): number { diff --git a/src/modules/greetings/greetings.controller.ts b/src/modules/greetings/greetings.controller.ts index 17a3831..e9ee479 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, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiCreatedResponse, ApiOkResponse, ApiOperation, 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'; @@ -16,7 +16,7 @@ export class GreetingsController { @Public() @Get() @ApiOperation({ summary: 'Get all greeting phrases' }) - @ApiResponse({ status: 200, type: [GreetingDto] }) + @ApiOkResponse({ type: [GreetingDto] }) findAll() { return this.greetingsService.findAll(); } @@ -27,7 +27,7 @@ export class GreetingsController { @Post() @ApiOperation({ summary: 'Add greeting phrase (admin only)' }) @ApiBody({ schema: { type: 'object', properties: { text: { type: 'string', example: 'Привет!' } }, required: ['text'] } }) - @ApiResponse({ status: 201, type: GreetingDto }) + @ApiCreatedResponse({ type: GreetingDto }) create(@Body('text') text: string) { return this.greetingsService.create(text); } @@ -37,7 +37,7 @@ export class GreetingsController { @Roles('admin') @Delete(':id') @ApiOperation({ summary: 'Delete greeting phrase (admin only)' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) delete(@Param('id') id: string) { return this.greetingsService.delete(id); } diff --git a/src/modules/likes/likes.controller.ts b/src/modules/likes/likes.controller.ts index 5ce1262..3a7f362 100644 --- a/src/modules/likes/likes.controller.ts +++ b/src/modules/likes/likes.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Get, Post, Query, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { CreateLikeDto } from './dto/create-like.dto'; @@ -15,14 +15,14 @@ export class LikesController { @Post() @ApiOperation({ summary: 'Like or dislike a profile' }) - @ApiResponse({ status: 201, type: CreateLikeResponseDto }) + @ApiCreatedResponse({ type: CreateLikeResponseDto }) createLike(@CurrentUser('id') userId: string, @Body() dto: CreateLikeDto) { return this.likesService.createLike(userId, dto); } @Get('matches') @ApiOperation({ summary: 'Get matches for a profile' }) - @ApiResponse({ status: 200, type: [MatchDto] }) + @ApiOkResponse({ type: [MatchDto] }) getMyMatches( @CurrentUser('id') userId: string, @Query('profileId') profileId: string, diff --git a/src/modules/media/media.controller.ts b/src/modules/media/media.controller.ts index 0d93273..bb60a01 100644 --- a/src/modules/media/media.controller.ts +++ b/src/modules/media/media.controller.ts @@ -1,5 +1,5 @@ import { Controller, Delete, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiConsumes, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiConsumes, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { FastifyRequest } from 'fastify'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; @@ -17,7 +17,7 @@ export class MediaController { @Post('upload') @ApiOperation({ summary: 'Upload photo / video / audio to profile' }) @ApiConsumes('multipart/form-data') - @ApiResponse({ status: 201, type: MediaItemDto }) + @ApiCreatedResponse({ type: MediaItemDto }) async upload( @CurrentUser('id') userId: string, @Param('profileId') profileId: string, @@ -37,14 +37,14 @@ export class MediaController { @Get() @ApiOperation({ summary: 'Get all media for a profile' }) - @ApiResponse({ status: 200, type: [MediaItemDto] }) + @ApiOkResponse({ type: [MediaItemDto] }) getMedia(@Param('profileId') profileId: string) { return this.mediaService.getByProfileId(profileId); } @Delete(':mediaId') @ApiOperation({ summary: 'Delete media item' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) deleteMedia( @CurrentUser('id') userId: string, @Param('mediaId') mediaId: string, diff --git a/src/modules/profiles/profiles.controller.ts b/src/modules/profiles/profiles.controller.ts index 6c7356c..5c92585 100644 --- a/src/modules/profiles/profiles.controller.ts +++ b/src/modules/profiles/profiles.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Delete, Get, Param, Post, Put, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { CreateProfileDto } from './dto/create-profile.dto'; @@ -17,21 +17,21 @@ export class ProfilesController { @Post() @ApiOperation({ summary: 'Create a new profile (one user can have many)' }) - @ApiResponse({ status: 201, type: ProfileResponseDto }) + @ApiCreatedResponse({ type: ProfileResponseDto }) create(@CurrentUser('id') userId: string, @Body() dto: CreateProfileDto) { return this.profilesService.create(userId, dto); } @Get('my') @ApiOperation({ summary: 'Get all my profiles' }) - @ApiResponse({ status: 200, type: [ProfileResponseDto] }) + @ApiOkResponse({ type: [ProfileResponseDto] }) getMyProfiles(@CurrentUser('id') userId: string) { return this.profilesService.findAllByUserId(userId); } @Put(':profileId') @ApiOperation({ summary: 'Update profile by ID (must be owner)' }) - @ApiResponse({ status: 200, type: ProfileResponseDto }) + @ApiOkResponse({ type: ProfileResponseDto }) update( @CurrentUser('id') userId: string, @Param('profileId') profileId: string, @@ -42,14 +42,14 @@ export class ProfilesController { @Get(':profileId') @ApiOperation({ summary: 'Get profile by ID' }) - @ApiResponse({ status: 200, type: ProfileResponseDto }) + @ApiOkResponse({ type: ProfileResponseDto }) findOne(@Param('profileId') profileId: string) { return this.profilesService.findByProfileId(profileId); } @Delete(':profileId') @ApiOperation({ summary: 'Delete profile (must be owner)' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) delete(@CurrentUser('id') userId: string, @Param('profileId') profileId: string) { return this.profilesService.delete(userId, profileId); } diff --git a/src/modules/reports/reports.controller.ts b/src/modules/reports/reports.controller.ts index 3fb7200..1dbfd71 100644 --- a/src/modules/reports/reports.controller.ts +++ b/src/modules/reports/reports.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { Roles } from '../../common/decorators/roles.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; @@ -17,7 +17,7 @@ export class ReportsController { @Post() @ApiOperation({ summary: 'Submit a report' }) - @ApiResponse({ status: 201, type: ReportDto }) + @ApiCreatedResponse({ type: ReportDto }) create(@CurrentUser('id') userId: string, @Body() dto: CreateReportDto) { return this.reportsService.create(userId, dto); } @@ -26,7 +26,7 @@ export class ReportsController { @Roles('admin', 'moderator') @UseGuards(RolesGuard) @ApiOperation({ summary: 'Get all reports (admin/moderator)' }) - @ApiResponse({ status: 200, type: [ReportDto] }) + @ApiOkResponse({ type: [ReportDto] }) getAll() { return this.reportsService.getAll(); } diff --git a/src/modules/tags/tags.controller.ts b/src/modules/tags/tags.controller.ts index cf0cebc..e257d3e 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, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiBody, ApiCreatedResponse, ApiOkResponse, ApiOperation, 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'; @@ -16,7 +16,7 @@ export class TagsController { @Public() @Get() @ApiOperation({ summary: 'Get all tags' }) - @ApiResponse({ status: 200, type: [TagResponseDto] }) + @ApiOkResponse({ type: [TagResponseDto] }) findAll() { return this.tagsService.findAll(); } @@ -27,7 +27,7 @@ export class TagsController { @Post() @ApiOperation({ summary: 'Create tag (admin only)' }) @ApiBody({ schema: { type: 'object', properties: { value: { type: 'string', example: 'Спорт' } }, required: ['value'] } }) - @ApiResponse({ status: 201, type: TagResponseDto }) + @ApiCreatedResponse({ type: TagResponseDto }) create(@Body('value') value: string) { return this.tagsService.create(value); } @@ -37,7 +37,7 @@ export class TagsController { @Roles('admin') @Delete(':id') @ApiOperation({ summary: 'Delete tag (admin only)' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) delete(@Param('id') id: string) { return this.tagsService.delete(id); } diff --git a/src/modules/users/users.controller.ts b/src/modules/users/users.controller.ts index 3163139..5effce7 100644 --- a/src/modules/users/users.controller.ts +++ b/src/modules/users/users.controller.ts @@ -1,5 +1,5 @@ import { Controller, Get, Param, Patch, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { Roles } from '../../common/decorators/roles.decorator'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; @@ -17,14 +17,14 @@ export class UsersController { @Get('me') @ApiOperation({ summary: 'Get current user with profile list' }) - @ApiResponse({ status: 200, type: MeResponseDto }) + @ApiOkResponse({ type: MeResponseDto }) getMe(@CurrentUser('id') userId: string) { return this.usersService.getMe(userId); } @Get(':id') @ApiOperation({ summary: 'Get user by ID' }) - @ApiResponse({ status: 200, type: UserResponseDto }) + @ApiOkResponse({ type: UserResponseDto }) findOne(@Param('id') id: string) { return this.usersService.findById(id); } @@ -33,7 +33,7 @@ export class UsersController { @Roles('admin', 'moderator') @UseGuards(RolesGuard) @ApiOperation({ summary: 'Ban user' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) ban(@Param('id') id: string) { return this.usersService.banUser(id); } @@ -42,7 +42,7 @@ export class UsersController { @Roles('admin', 'moderator') @UseGuards(RolesGuard) @ApiOperation({ summary: 'Activate user' }) - @ApiResponse({ status: 200, type: MessageResponseDto }) + @ApiOkResponse({ type: MessageResponseDto }) activate(@Param('id') id: string) { return this.usersService.activateUser(id); }