import { Controller, Post, Body, UseGuards, Get, Request, Put, Param } from "@nestjs/common"; import { UsersService } from "./users.service"; import { User } from "./entities/user.entity"; import { CreateUserDto } from "./dto/create-user.dto"; import { LoginUserDto } from "./dto/login-user.dto"; import { JwtAuthGuard } from "src/guard/auth.guard"; import { UpdateUserDto } from "./dto/update-user.dto"; import { RoleGuard } from "src/guard/role.guard"; @Controller("user") export class UsersController { constructor(private readonly usersService: UsersService) {} //register as user @Post("register") async register(@Body() createUserDto: CreateUserDto): Promise<{message}> { return this.usersService.register(createUserDto); } //login as user @Post("login") async login(@Body() loginUserDto: LoginUserDto): Promise<{ token }> { return this.usersService.login(loginUserDto); } //retrieve a user information @UseGuards(JwtAuthGuard) @Get() async getProfile(@Request() req): Promise { const userId = req.user.id; return this.usersService.getProfile(userId); } //edit user profile @UseGuards(JwtAuthGuard) @Put() async editProfile(@Request() req, @Body() updateUserDto: UpdateUserDto) { const userId = req.user.id; return this.usersService.editProfile(userId, updateUserDto); } //get users list (admin) @UseGuards(RoleGuard) @Get("users") async findAll(): Promise { return this.usersService.findAll(); } @UseGuards(RoleGuard) @Get("users/:id") async findSpecificUserInfoByUser(@Param("id") id): Promise { return this.usersService.findSpecificUserInfoByUser(id); } }