import { Controller, Get, Param, Patch, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiResponse, 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'; import { RolesGuard } from '../../common/guards/roles.guard'; import { UsersService } from './users.service'; import { MeResponseDto, UserResponseDto } from './dto/user-response.dto'; import { MessageResponseDto } from '../../common/dto/message-response.dto'; @ApiTags('users') @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Get('me') @ApiOperation({ summary: 'Get current user with profile list' }) @ApiResponse({ status: 200, 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 }) findOne(@Param('id') id: string) { return this.usersService.findById(id); } @Patch(':id/ban') @Roles('admin', 'moderator') @UseGuards(RolesGuard) @ApiOperation({ summary: 'Ban user' }) @ApiResponse({ status: 200, type: MessageResponseDto }) ban(@Param('id') id: string) { return this.usersService.banUser(id); } @Patch(':id/activate') @Roles('admin', 'moderator') @UseGuards(RolesGuard) @ApiOperation({ summary: 'Activate user' }) @ApiResponse({ status: 200, type: MessageResponseDto }) activate(@Param('id') id: string) { return this.usersService.activateUser(id); } }