You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.5 KiB
73 lines
2.5 KiB
import { Controller, Post, Body, UseGuards, Get, Request, Put, Param, HttpException, HttpStatus, Delete } 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"; |
|
import { plainToInstance } from "class-transformer"; |
|
|
|
@Controller("user") |
|
export class UsersController { |
|
constructor(private readonly usersService: UsersService) {} |
|
//register as user |
|
@Post("register") |
|
async register(@Body() createUserDto: CreateUserDto) { |
|
return this.usersService.register(createUserDto); |
|
} |
|
//login as user |
|
@Post("login") |
|
async login(@Body() loginUserDto: LoginUserDto) { |
|
return this.usersService.login(loginUserDto); |
|
} |
|
//get access token |
|
@Post("new-token") |
|
async newAccessToken(@Body("token") token: string) { |
|
return this.usersService.newAccessToken(token); |
|
} |
|
//logout user |
|
@UseGuards(JwtAuthGuard) |
|
@Get("logout") |
|
async logout(@Request() req) { |
|
const userId = req.user.id; |
|
return this.usersService.logout(userId); |
|
} |
|
//retrieve a user information |
|
@UseGuards(JwtAuthGuard) |
|
@Get() |
|
async getProfile(@Request() req): Promise<User> { |
|
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; |
|
const { refreshToken, ...sanitizedDto } = updateUserDto; |
|
return this.usersService.editProfile(userId, sanitizedDto); |
|
} |
|
/////////////////////////////////////admin access endpoints///////////////////////////////////////////////////////// |
|
//get users list (admin) |
|
@UseGuards(RoleGuard) |
|
@Get("users") |
|
async findAll(): Promise<User[]> { |
|
return this.usersService.findAll(); |
|
} |
|
// get a specific user info (admin) |
|
@UseGuards(RoleGuard) |
|
@Get("users/:id") |
|
async findSpecificUserInfoByUser(@Param("id") id) { |
|
return this.usersService.findSpecificUserInfoByUser(id); |
|
} |
|
// delete a specific user (admin) |
|
@UseGuards(RoleGuard) |
|
@Delete(":id?") |
|
async deleteUser(@Param("id") id) { |
|
if (!id) { |
|
throw new HttpException("User ID is required.", HttpStatus.BAD_REQUEST); |
|
} |
|
return this.usersService.deleteUser(id); |
|
} |
|
}
|
|
|