import { Controller, Get, UseGuards, Query, ValidationPipe } from '@nestjs/common'; import { ApiTags, ApiBearerAuth, ApiOperation, ApiOkResponse } from '@nestjs/swagger'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { UserService } from '../user.service'; import { FindUsersDto } from '../dto/find-user.dto'; import { UserId } from 'src/common/decorators/user-id.decorator'; import { RestId } from 'src/common/decorators'; @UseGuards(AdminAuthGuard) @ApiBearerAuth() @ApiTags('Admin/User') @Controller('admin/user') export class AdminUserController { constructor(private readonly userService: UserService) {} @UseGuards(AdminAuthGuard) @ApiBearerAuth() @ApiOperation({ summary: 'Get the current authenticated user profile' }) @Get('/me') async getUser(@UserId() userId: string) { const user = await this.userService.findById(userId); return { message: `GET request: Retrieving profile for authenticated user`, user, userId, }; } @UseGuards(AdminAuthGuard) @ApiBearerAuth() @ApiOperation({ summary: 'Get paginated list of users with filters' }) @ApiOkResponse({ description: 'Paginated list of users' }) @Get('/') async findAll( @Query(new ValidationPipe({ transform: true, whitelist: true })) query: FindUsersDto, @RestId() restId: string, ) { return this.userService.findAll(restId, query); } }