import { Body, Controller, Get, HttpCode, HttpStatus, Patch, Post, Query } from "@nestjs/common"; import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { CheckValidityDTO } from "./DTO/check-validity.dto"; import { CreateAdminDto } from "./DTO/create-admin.dto"; import { CreateRoleDto } from "./DTO/create-role.dto"; import { SearchAdminQueryDto } from "./DTO/search-admins-query.dto"; import { SearchCustomersDto } from "./DTO/search-customers.dto"; import { SearchRolesQueryDto } from "./DTO/search-roles.dto"; import { UpdateProfileDto } from "./DTO/update-profile.dto"; import { CreateUserGroupDto } from "./DTO/user-group.dto"; import { User } from "./entities/user.entity"; import { PermissionEnum } from "./enums/permission.enum"; import { UsersService } from "./providers/users.service"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { PermissionsDec } from "../../common/decorators/permission.decorator"; import { UserDec } from "../../common/decorators/user.decorator"; @Controller("users") @ApiTags("users") export class UsersController { constructor(private usersService: UsersService) {} /************************************************************ */ @AuthGuards() @ApiOperation({ summary: "Get user profile" }) @Get("me") getMe(@UserDec() user: User) { return this.usersService.getMe(user.id); } /************************************************************ */ @AuthGuards() @ApiOperation({ summary: "Update user profile" }) @Patch("update-profile") updateProfile(@Body() updateProfileDto: UpdateProfileDto, @UserDec() user: User) { return this.usersService.updateProfile(user.id, updateProfileDto); } /************************************************************ */ @AuthGuards() @ApiOperation({ summary: "Check validity of user field" }) @HttpCode(HttpStatus.OK) @Post("check-validity") checkValidity(@Body() checkValidityDto: CheckValidityDTO, @UserDec() user: User) { return this.usersService.checkValidity(checkValidityDto, user.id); } /************************************************************ */ @AuthGuards() @ApiOperation({ summary: "Create user group ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @Post("user-group") createUserGroup(@Body() createDto: CreateUserGroupDto) { return this.usersService.createUserGroup(createDto); } /************************************************************ */ @ApiOperation({ summary: "get all user group ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @Get("user-group") UserGroups() { return this.usersService.getUserGroups(); } /************************************************************ */ @ApiOperation({ summary: "get all users ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @Get() Users() { return this.usersService.findAllUsers(); } @ApiOperation({ summary: "get all customers ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @Get("customers") customers(@Query() queryDto: SearchCustomersDto) { return this.usersService.findAllCustomers(queryDto); } @ApiOperation({ summary: "get all admins ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @Get("admins") getAdmins(@Query() queryDto: SearchAdminQueryDto) { return this.usersService.getAdmins(queryDto); } @ApiOperation({ summary: "create admin ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @Post("admins") createAdmin(@Body() createDto: CreateAdminDto) { return this.usersService.createAdmin(createDto); } @ApiOperation({ summary: "get all permissions ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @Get("permissions") getPermissions() { return this.usersService.getPermissions(); } @ApiOperation({ summary: "get all roles ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @Get("roles") getRoles(@Query() queryDto: SearchRolesQueryDto) { return this.usersService.getRoles(queryDto); } @ApiOperation({ summary: "create role ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @Post("roles") createRole(@Body() createDto: CreateRoleDto) { return this.usersService.createRole(createDto); } }