Files
dmenu-api/src/modules/users/user.controller.ts
T
2025-11-10 23:00:59 +03:30

55 lines
1.8 KiB
TypeScript

import { Controller, Get, Req, UseGuards, Query, ValidationPipe } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
import { AuthGuard, type AuthRequest } from 'src/modules/auth/guards/auth.guard';
import { UserService } from './user.service';
// import { UpdateUserDto } from './dto/update-user.dto';
import { FindUsersDto } from './dto/find-user.dto';
import { AdminAuthGuard } from 'src/modules/auth/guards/auth.admin.guard';
@ApiTags('User')
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@UseGuards(AuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get the current authenticated user profile' })
@Get('/')
async getUser(@Req() req: AuthRequest) {
const userId = req.user.sub;
const user = await this.userService.findById(userId);
return {
message: `GET request: Retrieving profile for authenticated user `,
user,
};
}
// 2. Update User Specification (PATCH /user/spec)
// @UseGuards(AuthGuard)
// @ApiBearerAuth()
// @ApiOperation({ summary: 'Update the user specification' })
// @ApiBody({ type: UpdateUserDto })
// @Patch('/')
// async updateUserSpec(@Req() req: AuthRequest, @Body() dto: UpdateUserDto) {
// const userId = req.user.sub;
// const user = await this.userService.updateUser(userId, dto);
// return {
// message: `PATCH request: Updating specification for user ${userId} `,
// userId,
// user,
// };
// }
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Users : Admin Route' })
@Get('/admin/users')
async findAll(
// Use ValidationPipe to validate and transform the DTO
@Query(new ValidationPipe({ transform: true, whitelist: true }))
query: FindUsersDto,
) {
return this.userService.findAll(query);
}
}