feat(src/modules/greetings/greetings.controller.ts): обновляет ответы API для получения и создания фраз приветствия

 feat(src/modules/likes/likes.controller.ts): обновляет ответы API для создания лайка и получения совпадений
 feat(src/auth/auth.controller.ts): обновляет ответы API для регистрации, входа и выхода пользователя
 feat(src/modules/media/media.controller.ts): обновляет ответы API для загрузки и получения медиа
 feat(src/modules/users/users.controller.ts): обновляет ответы API для получения и управления пользователями
 feat(src/modules/dates/dto/dates-response.dto.ts): изменяет название свойства статуса даты на dateStatus
 feat(src/modules/cities/cities.controller.ts): обновляет ответы API для получения и создания городов и районов
 feat(src/modules/chat/chat.controller.ts): обновляет ответы API для создания и получения чатов и сообщений
 feat(src/modules/reports/reports.controller.ts): обновляет ответы API для создания и получения отчетов
 feat(src/modules/feed/feed.controller.ts): обновляет структуру ответа
This commit is contained in:
Oscar
2026-06-08 16:41:08 +03:00
parent 8b852c9f28
commit 1662bb7dc8
14 changed files with 66 additions and 56 deletions

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Post, UseGuards } from '@nestjs/common'; 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 { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto'; import { LoginDto } from './dto/login.dto';
import { RefreshTokenDto } from './dto/refresh-token.dto'; import { RefreshTokenDto } from './dto/refresh-token.dto';
@@ -18,7 +18,7 @@ export class AuthController {
@Public() @Public()
@Post('register') @Post('register')
@ApiOperation({ summary: 'Register new user' }) @ApiOperation({ summary: 'Register new user' })
@ApiResponse({ status: 201, type: TokensResponseDto }) @ApiCreatedResponse({ type: TokensResponseDto })
register(@Body() dto: RegisterDto) { register(@Body() dto: RegisterDto) {
return this.authService.register(dto); return this.authService.register(dto);
} }
@@ -26,7 +26,7 @@ export class AuthController {
@Public() @Public()
@Post('login') @Post('login')
@ApiOperation({ summary: 'Login with phone and password' }) @ApiOperation({ summary: 'Login with phone and password' })
@ApiResponse({ status: 201, type: TokensResponseDto }) @ApiCreatedResponse({ type: TokensResponseDto })
login(@Body() dto: LoginDto) { login(@Body() dto: LoginDto) {
return this.authService.login(dto); return this.authService.login(dto);
} }
@@ -35,7 +35,7 @@ export class AuthController {
@Post('logout') @Post('logout')
@ApiBearerAuth() @ApiBearerAuth()
@ApiOperation({ summary: 'Logout current user' }) @ApiOperation({ summary: 'Logout current user' })
@ApiResponse({ status: 201, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
logout(@CurrentUser('id') userId: string) { logout(@CurrentUser('id') userId: string) {
return this.authService.logout(userId); return this.authService.logout(userId);
} }
@@ -43,7 +43,7 @@ export class AuthController {
@Public() @Public()
@Post('refresh') @Post('refresh')
@ApiOperation({ summary: 'Refresh access token' }) @ApiOperation({ summary: 'Refresh access token' })
@ApiResponse({ status: 201, type: TokensResponseDto }) @ApiCreatedResponse({ type: TokensResponseDto })
refresh(@Body() dto: RefreshTokenDto) { refresh(@Body() dto: RefreshTokenDto) {
return this.authService.refreshTokens(dto.refreshToken); return this.authService.refreshTokens(dto.refreshToken);
} }
@@ -53,7 +53,7 @@ export class AuthController {
@ApiBearerAuth() @ApiBearerAuth()
@ApiOperation({ summary: 'Update FCM push token' }) @ApiOperation({ summary: 'Update FCM push token' })
@ApiBody({ schema: { type: 'object', properties: { fcmToken: { type: 'string', example: 'firebase-token-abc123' } }, required: ['fcmToken'] } }) @ApiBody({ schema: { type: 'object', properties: { fcmToken: { type: 'string', example: 'firebase-token-abc123' } }, required: ['fcmToken'] } })
@ApiResponse({ status: 201, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
updateFcmToken( updateFcmToken(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Body('fcmToken') fcmToken: string, @Body('fcmToken') fcmToken: string,

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Delete, Get, Param, Post, Query, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { ChatService } from './chat.service'; import { ChatService } from './chat.service';
@@ -17,14 +17,14 @@ export class ChatController {
@Post() @Post()
@ApiOperation({ summary: 'Open a chat for a match' }) @ApiOperation({ summary: 'Open a chat for a match' })
@ApiResponse({ status: 201, type: ChatDto }) @ApiCreatedResponse({ type: ChatDto })
createChat(@CurrentUser('id') userId: string, @Body() dto: CreateChatDto) { createChat(@CurrentUser('id') userId: string, @Body() dto: CreateChatDto) {
return this.chatService.createChat(userId, dto); return this.chatService.createChat(userId, dto);
} }
@Get() @Get()
@ApiOperation({ summary: 'Get active chats for a profile' }) @ApiOperation({ summary: 'Get active chats for a profile' })
@ApiResponse({ status: 200, type: [ChatDto] }) @ApiOkResponse({ type: [ChatDto] })
getChats( getChats(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,
@@ -36,7 +36,7 @@ export class ChatController {
@ApiOperation({ summary: 'Get chat messages' }) @ApiOperation({ summary: 'Get chat messages' })
@ApiQuery({ name: 'page', required: false, schema: { default: 1, type: 'number' } }) @ApiQuery({ name: 'page', required: false, schema: { default: 1, type: 'number' } })
@ApiQuery({ name: 'limit', required: false, schema: { default: 50, type: 'number' } }) @ApiQuery({ name: 'limit', required: false, schema: { default: 50, type: 'number' } })
@ApiResponse({ status: 200, type: [MessageDto] }) @ApiOkResponse({ type: [MessageDto] })
getMessages( getMessages(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,
@@ -49,7 +49,7 @@ export class ChatController {
@Post(':chatId/messages') @Post(':chatId/messages')
@ApiOperation({ summary: 'Send a message' }) @ApiOperation({ summary: 'Send a message' })
@ApiResponse({ status: 201, type: MessageDto }) @ApiCreatedResponse({ type: MessageDto })
sendMessage( sendMessage(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,
@@ -61,7 +61,7 @@ export class ChatController {
@Delete(':chatId') @Delete(':chatId')
@ApiOperation({ summary: 'Close a chat' }) @ApiOperation({ summary: 'Close a chat' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
closeChat( closeChat(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Get, Param, Post, UseGuards } from '@nestjs/common'; 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 { Public } from '../../common/decorators/public.decorator';
import { Roles } from '../../common/decorators/roles.decorator'; import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -16,7 +16,7 @@ export class CitiesController {
@Public() @Public()
@Get() @Get()
@ApiOperation({ summary: 'Get all cities' }) @ApiOperation({ summary: 'Get all cities' })
@ApiResponse({ status: 200, type: [CityResponseDto] }) @ApiOkResponse({ type: [CityResponseDto] })
findAll() { findAll() {
return this.citiesService.findAll(); return this.citiesService.findAll();
} }
@@ -24,7 +24,7 @@ export class CitiesController {
@Public() @Public()
@Get(':cityId/districts') @Get(':cityId/districts')
@ApiOperation({ summary: 'Get districts for a city' }) @ApiOperation({ summary: 'Get districts for a city' })
@ApiResponse({ status: 200, type: [DistrictResponseDto] }) @ApiOkResponse({ type: [DistrictResponseDto] })
findDistricts(@Param('cityId') cityId: string) { findDistricts(@Param('cityId') cityId: string) {
return this.citiesService.findDistricts(cityId); return this.citiesService.findDistricts(cityId);
} }
@@ -34,7 +34,7 @@ export class CitiesController {
@Roles('admin') @Roles('admin')
@Post() @Post()
@ApiOperation({ summary: 'Create city (admin only)' }) @ApiOperation({ summary: 'Create city (admin only)' })
@ApiResponse({ status: 201, type: CityResponseDto }) @ApiCreatedResponse({ type: CityResponseDto })
createCity(@Body() body: CreateCityDto) { createCity(@Body() body: CreateCityDto) {
return this.citiesService.createCity(body.name, body.lat, body.lng); return this.citiesService.createCity(body.name, body.lat, body.lng);
} }
@@ -44,7 +44,7 @@ export class CitiesController {
@Roles('admin') @Roles('admin')
@Post(':cityId/districts') @Post(':cityId/districts')
@ApiOperation({ summary: 'Create district (admin only)' }) @ApiOperation({ summary: 'Create district (admin only)' })
@ApiResponse({ status: 201, type: DistrictResponseDto }) @ApiCreatedResponse({ type: DistrictResponseDto })
createDistrict(@Param('cityId') cityId: string, @Body() body: CreateDistrictDto) { createDistrict(@Param('cityId') cityId: string, @Body() body: CreateDistrictDto) {
return this.citiesService.createDistrict(cityId, body.name); return this.citiesService.createDistrict(cityId, body.name);
} }

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { DatesService } from './dates.service'; import { DatesService } from './dates.service';
@@ -16,14 +16,14 @@ export class DatesController {
@Post() @Post()
@ApiOperation({ summary: 'Propose a meetup' }) @ApiOperation({ summary: 'Propose a meetup' })
@ApiResponse({ status: 201, type: DateDto }) @ApiCreatedResponse({ type: DateDto })
create(@CurrentUser('id') userId: string, @Body() dto: CreateDateDto) { create(@CurrentUser('id') userId: string, @Body() dto: CreateDateDto) {
return this.datesService.create(userId, dto); return this.datesService.create(userId, dto);
} }
@Get() @Get()
@ApiOperation({ summary: 'Get dates for a profile' }) @ApiOperation({ summary: 'Get dates for a profile' })
@ApiResponse({ status: 200, type: [DateWithStatusDto] }) @ApiOkResponse({ type: [DateWithStatusDto] })
getDates( getDates(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,
@@ -33,7 +33,7 @@ export class DatesController {
@Patch(':id/status') @Patch(':id/status')
@ApiOperation({ summary: 'Update date status' }) @ApiOperation({ summary: 'Update date status' })
@ApiResponse({ status: 200, type: DateDto }) @ApiOkResponse({ type: DateDto })
updateStatus( updateStatus(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,
@@ -45,7 +45,7 @@ export class DatesController {
@Get('statuses') @Get('statuses')
@ApiOperation({ summary: 'Get available date statuses' }) @ApiOperation({ summary: 'Get available date statuses' })
@ApiResponse({ status: 200, type: [DateStatusDto] }) @ApiOkResponse({ type: [DateStatusDto] })
getStatuses() { getStatuses() {
return this.datesService.getStatuses(); return this.datesService.getStatuses();
} }

View File

@@ -17,5 +17,5 @@ export class DateDto {
export class DateWithStatusDto { export class DateWithStatusDto {
@ApiProperty({ type: DateDto }) date: DateDto; @ApiProperty({ type: DateDto }) date: DateDto;
@ApiPropertyOptional({ type: DateStatusDto, nullable: true }) date_status: DateStatusDto | null; @ApiPropertyOptional({ type: DateStatusDto, nullable: true }) dateStatus: DateStatusDto | null;
} }

View File

@@ -1,5 +1,5 @@
import { Controller, Get, Query, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { FeedFilterDto } from './dto/feed-filter.dto'; import { FeedFilterDto } from './dto/feed-filter.dto';
@@ -9,13 +9,23 @@ import { ProfileResponseDto } from '../profiles/dto/profile-response.dto';
@ApiTags('feed') @ApiTags('feed')
@ApiBearerAuth() @ApiBearerAuth()
@UseGuards(JwtAuthGuard) @UseGuards(JwtAuthGuard)
@ApiExtraModels(ProfileResponseDto)
@Controller('feed') @Controller('feed')
export class FeedController { export class FeedController {
constructor(private readonly feedService: FeedService) {} constructor(private readonly feedService: FeedService) {}
@Get() @Get()
@ApiOperation({ summary: 'Get filtered feed (requires profileId)' }) @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) { getFeed(@CurrentUser('id') userId: string, @Query() filter: FeedFilterDto) {
return this.feedService.getFeed(userId, filter); return this.feedService.getFeed(userId, filter);
} }

View File

@@ -61,7 +61,7 @@ export class FeedService {
.where(inArray(profileTag.tagId, tagIds)); .where(inArray(profileTag.tagId, tagIds));
const matchedIds = tagMatches.map((r) => r.profileId); 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)); 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 { private calculateAge(birthDate: string): number {

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; 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 { Public } from '../../common/decorators/public.decorator';
import { Roles } from '../../common/decorators/roles.decorator'; import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -16,7 +16,7 @@ export class GreetingsController {
@Public() @Public()
@Get() @Get()
@ApiOperation({ summary: 'Get all greeting phrases' }) @ApiOperation({ summary: 'Get all greeting phrases' })
@ApiResponse({ status: 200, type: [GreetingDto] }) @ApiOkResponse({ type: [GreetingDto] })
findAll() { findAll() {
return this.greetingsService.findAll(); return this.greetingsService.findAll();
} }
@@ -27,7 +27,7 @@ export class GreetingsController {
@Post() @Post()
@ApiOperation({ summary: 'Add greeting phrase (admin only)' }) @ApiOperation({ summary: 'Add greeting phrase (admin only)' })
@ApiBody({ schema: { type: 'object', properties: { text: { type: 'string', example: 'Привет!' } }, required: ['text'] } }) @ApiBody({ schema: { type: 'object', properties: { text: { type: 'string', example: 'Привет!' } }, required: ['text'] } })
@ApiResponse({ status: 201, type: GreetingDto }) @ApiCreatedResponse({ type: GreetingDto })
create(@Body('text') text: string) { create(@Body('text') text: string) {
return this.greetingsService.create(text); return this.greetingsService.create(text);
} }
@@ -37,7 +37,7 @@ export class GreetingsController {
@Roles('admin') @Roles('admin')
@Delete(':id') @Delete(':id')
@ApiOperation({ summary: 'Delete greeting phrase (admin only)' }) @ApiOperation({ summary: 'Delete greeting phrase (admin only)' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
delete(@Param('id') id: string) { delete(@Param('id') id: string) {
return this.greetingsService.delete(id); return this.greetingsService.delete(id);
} }

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Get, Post, Query, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CreateLikeDto } from './dto/create-like.dto'; import { CreateLikeDto } from './dto/create-like.dto';
@@ -15,14 +15,14 @@ export class LikesController {
@Post() @Post()
@ApiOperation({ summary: 'Like or dislike a profile' }) @ApiOperation({ summary: 'Like or dislike a profile' })
@ApiResponse({ status: 201, type: CreateLikeResponseDto }) @ApiCreatedResponse({ type: CreateLikeResponseDto })
createLike(@CurrentUser('id') userId: string, @Body() dto: CreateLikeDto) { createLike(@CurrentUser('id') userId: string, @Body() dto: CreateLikeDto) {
return this.likesService.createLike(userId, dto); return this.likesService.createLike(userId, dto);
} }
@Get('matches') @Get('matches')
@ApiOperation({ summary: 'Get matches for a profile' }) @ApiOperation({ summary: 'Get matches for a profile' })
@ApiResponse({ status: 200, type: [MatchDto] }) @ApiOkResponse({ type: [MatchDto] })
getMyMatches( getMyMatches(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Query('profileId') profileId: string, @Query('profileId') profileId: string,

View File

@@ -1,5 +1,5 @@
import { Controller, Delete, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; 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 { FastifyRequest } from 'fastify';
import { CurrentUser } from '../../common/decorators/current-user.decorator'; import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -17,7 +17,7 @@ export class MediaController {
@Post('upload') @Post('upload')
@ApiOperation({ summary: 'Upload photo / video / audio to profile' }) @ApiOperation({ summary: 'Upload photo / video / audio to profile' })
@ApiConsumes('multipart/form-data') @ApiConsumes('multipart/form-data')
@ApiResponse({ status: 201, type: MediaItemDto }) @ApiCreatedResponse({ type: MediaItemDto })
async upload( async upload(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Param('profileId') profileId: string, @Param('profileId') profileId: string,
@@ -37,14 +37,14 @@ export class MediaController {
@Get() @Get()
@ApiOperation({ summary: 'Get all media for a profile' }) @ApiOperation({ summary: 'Get all media for a profile' })
@ApiResponse({ status: 200, type: [MediaItemDto] }) @ApiOkResponse({ type: [MediaItemDto] })
getMedia(@Param('profileId') profileId: string) { getMedia(@Param('profileId') profileId: string) {
return this.mediaService.getByProfileId(profileId); return this.mediaService.getByProfileId(profileId);
} }
@Delete(':mediaId') @Delete(':mediaId')
@ApiOperation({ summary: 'Delete media item' }) @ApiOperation({ summary: 'Delete media item' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
deleteMedia( deleteMedia(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Param('mediaId') mediaId: string, @Param('mediaId') mediaId: string,

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Delete, Get, Param, Post, Put, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CreateProfileDto } from './dto/create-profile.dto'; import { CreateProfileDto } from './dto/create-profile.dto';
@@ -17,21 +17,21 @@ export class ProfilesController {
@Post() @Post()
@ApiOperation({ summary: 'Create a new profile (one user can have many)' }) @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) { create(@CurrentUser('id') userId: string, @Body() dto: CreateProfileDto) {
return this.profilesService.create(userId, dto); return this.profilesService.create(userId, dto);
} }
@Get('my') @Get('my')
@ApiOperation({ summary: 'Get all my profiles' }) @ApiOperation({ summary: 'Get all my profiles' })
@ApiResponse({ status: 200, type: [ProfileResponseDto] }) @ApiOkResponse({ type: [ProfileResponseDto] })
getMyProfiles(@CurrentUser('id') userId: string) { getMyProfiles(@CurrentUser('id') userId: string) {
return this.profilesService.findAllByUserId(userId); return this.profilesService.findAllByUserId(userId);
} }
@Put(':profileId') @Put(':profileId')
@ApiOperation({ summary: 'Update profile by ID (must be owner)' }) @ApiOperation({ summary: 'Update profile by ID (must be owner)' })
@ApiResponse({ status: 200, type: ProfileResponseDto }) @ApiOkResponse({ type: ProfileResponseDto })
update( update(
@CurrentUser('id') userId: string, @CurrentUser('id') userId: string,
@Param('profileId') profileId: string, @Param('profileId') profileId: string,
@@ -42,14 +42,14 @@ export class ProfilesController {
@Get(':profileId') @Get(':profileId')
@ApiOperation({ summary: 'Get profile by ID' }) @ApiOperation({ summary: 'Get profile by ID' })
@ApiResponse({ status: 200, type: ProfileResponseDto }) @ApiOkResponse({ type: ProfileResponseDto })
findOne(@Param('profileId') profileId: string) { findOne(@Param('profileId') profileId: string) {
return this.profilesService.findByProfileId(profileId); return this.profilesService.findByProfileId(profileId);
} }
@Delete(':profileId') @Delete(':profileId')
@ApiOperation({ summary: 'Delete profile (must be owner)' }) @ApiOperation({ summary: 'Delete profile (must be owner)' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
delete(@CurrentUser('id') userId: string, @Param('profileId') profileId: string) { delete(@CurrentUser('id') userId: string, @Param('profileId') profileId: string) {
return this.profilesService.delete(userId, profileId); return this.profilesService.delete(userId, profileId);
} }

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { Roles } from '../../common/decorators/roles.decorator'; import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -17,7 +17,7 @@ export class ReportsController {
@Post() @Post()
@ApiOperation({ summary: 'Submit a report' }) @ApiOperation({ summary: 'Submit a report' })
@ApiResponse({ status: 201, type: ReportDto }) @ApiCreatedResponse({ type: ReportDto })
create(@CurrentUser('id') userId: string, @Body() dto: CreateReportDto) { create(@CurrentUser('id') userId: string, @Body() dto: CreateReportDto) {
return this.reportsService.create(userId, dto); return this.reportsService.create(userId, dto);
} }
@@ -26,7 +26,7 @@ export class ReportsController {
@Roles('admin', 'moderator') @Roles('admin', 'moderator')
@UseGuards(RolesGuard) @UseGuards(RolesGuard)
@ApiOperation({ summary: 'Get all reports (admin/moderator)' }) @ApiOperation({ summary: 'Get all reports (admin/moderator)' })
@ApiResponse({ status: 200, type: [ReportDto] }) @ApiOkResponse({ type: [ReportDto] })
getAll() { getAll() {
return this.reportsService.getAll(); return this.reportsService.getAll();
} }

View File

@@ -1,5 +1,5 @@
import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; 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 { Public } from '../../common/decorators/public.decorator';
import { Roles } from '../../common/decorators/roles.decorator'; import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -16,7 +16,7 @@ export class TagsController {
@Public() @Public()
@Get() @Get()
@ApiOperation({ summary: 'Get all tags' }) @ApiOperation({ summary: 'Get all tags' })
@ApiResponse({ status: 200, type: [TagResponseDto] }) @ApiOkResponse({ type: [TagResponseDto] })
findAll() { findAll() {
return this.tagsService.findAll(); return this.tagsService.findAll();
} }
@@ -27,7 +27,7 @@ export class TagsController {
@Post() @Post()
@ApiOperation({ summary: 'Create tag (admin only)' }) @ApiOperation({ summary: 'Create tag (admin only)' })
@ApiBody({ schema: { type: 'object', properties: { value: { type: 'string', example: 'Спорт' } }, required: ['value'] } }) @ApiBody({ schema: { type: 'object', properties: { value: { type: 'string', example: 'Спорт' } }, required: ['value'] } })
@ApiResponse({ status: 201, type: TagResponseDto }) @ApiCreatedResponse({ type: TagResponseDto })
create(@Body('value') value: string) { create(@Body('value') value: string) {
return this.tagsService.create(value); return this.tagsService.create(value);
} }
@@ -37,7 +37,7 @@ export class TagsController {
@Roles('admin') @Roles('admin')
@Delete(':id') @Delete(':id')
@ApiOperation({ summary: 'Delete tag (admin only)' }) @ApiOperation({ summary: 'Delete tag (admin only)' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
delete(@Param('id') id: string) { delete(@Param('id') id: string) {
return this.tagsService.delete(id); return this.tagsService.delete(id);
} }

View File

@@ -1,5 +1,5 @@
import { Controller, Get, Param, Patch, UseGuards } from '@nestjs/common'; 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 { CurrentUser } from '../../common/decorators/current-user.decorator';
import { Roles } from '../../common/decorators/roles.decorator'; import { Roles } from '../../common/decorators/roles.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
@@ -17,14 +17,14 @@ export class UsersController {
@Get('me') @Get('me')
@ApiOperation({ summary: 'Get current user with profile list' }) @ApiOperation({ summary: 'Get current user with profile list' })
@ApiResponse({ status: 200, type: MeResponseDto }) @ApiOkResponse({ type: MeResponseDto })
getMe(@CurrentUser('id') userId: string) { getMe(@CurrentUser('id') userId: string) {
return this.usersService.getMe(userId); return this.usersService.getMe(userId);
} }
@Get(':id') @Get(':id')
@ApiOperation({ summary: 'Get user by ID' }) @ApiOperation({ summary: 'Get user by ID' })
@ApiResponse({ status: 200, type: UserResponseDto }) @ApiOkResponse({ type: UserResponseDto })
findOne(@Param('id') id: string) { findOne(@Param('id') id: string) {
return this.usersService.findById(id); return this.usersService.findById(id);
} }
@@ -33,7 +33,7 @@ export class UsersController {
@Roles('admin', 'moderator') @Roles('admin', 'moderator')
@UseGuards(RolesGuard) @UseGuards(RolesGuard)
@ApiOperation({ summary: 'Ban user' }) @ApiOperation({ summary: 'Ban user' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
ban(@Param('id') id: string) { ban(@Param('id') id: string) {
return this.usersService.banUser(id); return this.usersService.banUser(id);
} }
@@ -42,7 +42,7 @@ export class UsersController {
@Roles('admin', 'moderator') @Roles('admin', 'moderator')
@UseGuards(RolesGuard) @UseGuards(RolesGuard)
@ApiOperation({ summary: 'Activate user' }) @ApiOperation({ summary: 'Activate user' })
@ApiResponse({ status: 200, type: MessageResponseDto }) @ApiOkResponse({ type: MessageResponseDto })
activate(@Param('id') id: string) { activate(@Param('id') id: string) {
return this.usersService.activateUser(id); return this.usersService.activateUser(id);
} }