From 54531c1c632b8611a265a0523cfeff1db0e866e3 Mon Sep 17 00:00:00 2001 From: nicekid1 <86746988+nicekid1@users.noreply.github.com> Date: Sat, 4 Jan 2025 12:09:47 +0330 Subject: [PATCH] Add functionality to edit user profile in user module --- src/users/dto/update-user.dto.ts | 33 +++++++++++++++++++++++++++++++ src/users/entities/user.entity.ts | 4 ++++ src/users/users.controller.ts | 16 ++++++++++----- src/users/users.service.ts | 20 +++++++++++++++++-- 4 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 src/users/dto/update-user.dto.ts diff --git a/src/users/dto/update-user.dto.ts b/src/users/dto/update-user.dto.ts new file mode 100644 index 0000000..ff19282 --- /dev/null +++ b/src/users/dto/update-user.dto.ts @@ -0,0 +1,33 @@ + +import { IsOptional, IsString, IsEmail, IsEnum } from 'class-validator'; +import {Gender } from '../entities/user.entity'; + +export class UpdateUserDto { + @IsOptional() + @IsString() + username?: string; + + @IsOptional() + @IsEmail() + email?: string; + + @IsOptional() + @IsString() + password?: string; + + @IsOptional() + @IsString() + firstName?: string; + + @IsOptional() + @IsString() + lastName?: string; + + @IsOptional() + @IsString() + phoneNumber?: string; + + @IsOptional() + @IsEnum(Gender) + gender?: Gender; +} diff --git a/src/users/entities/user.entity.ts b/src/users/entities/user.entity.ts index 54ab7fb..64948eb 100644 --- a/src/users/entities/user.entity.ts +++ b/src/users/entities/user.entity.ts @@ -29,3 +29,7 @@ export class User extends Model { }) gender: string; } +export enum Gender { + Male = 'male', + Female = 'female', +} diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts index 4a1eb9d..e546514 100644 --- a/src/users/users.controller.ts +++ b/src/users/users.controller.ts @@ -1,21 +1,22 @@ -import { Controller, Post, Body, UseGuards, Get,Request} from "@nestjs/common"; +import { Controller, Post, Body, UseGuards, Get, Request, Put } 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"; @Controller("user") export class UsersController { constructor(private readonly usersService: UsersService) {} //register as user @Post("register") - async register(@Body() createUserDto: CreateUserDto):Promise { + async register(@Body() createUserDto: CreateUserDto): Promise { return this.usersService.register(createUserDto); } //login as user @Post("login") - async login(@Body() loginUserDto:LoginUserDto):Promise<{token}> { + async login(@Body() loginUserDto: LoginUserDto): Promise<{ token }> { return this.usersService.login(loginUserDto); } @@ -23,8 +24,13 @@ export class UsersController { @UseGuards(JwtAuthGuard) @Get() async getProfile(@Request() req): Promise { - const userId = req.user.id; + const userId = req.user.id; return this.usersService.getProfile(userId); } - + @UseGuards(JwtAuthGuard) + @Put() + async editProfile(@Request() req, @Body() updateUserDto: UpdateUserDto): Promise { + const userId = req.user.id; + return this.usersService.editProfile(userId, updateUserDto); + } } diff --git a/src/users/users.service.ts b/src/users/users.service.ts index de415b2..41b377a 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -1,4 +1,4 @@ -import { HttpException, HttpStatus, Injectable, UnauthorizedException, BadRequestException } from "@nestjs/common"; +import { HttpException, HttpStatus, Injectable, UnauthorizedException, BadRequestException, NotFoundException } from "@nestjs/common"; import { InjectModel } from "@nestjs/sequelize"; import { User } from "./entities/user.entity"; import * as bcrypt from "bcrypt"; @@ -6,6 +6,7 @@ import { JwtService } from "@nestjs/jwt"; import { ConfigService } from "@nestjs/config"; import { CreateUserDto } from "./dto/create-user.dto"; import { LoginUserDto } from "./dto/login-user.dto"; +import { UpdateUserDto } from "./dto/update-user.dto"; @Injectable() export class UsersService { @@ -66,7 +67,7 @@ export class UsersService { return { token }; } - + //get information user method async getProfile(userId: number): Promise { const user = await this.userModel.findOne({ where: { id: userId }, @@ -77,6 +78,21 @@ export class UsersService { throw new Error('User not found'); } + return user; + } + async editProfile(userId:number, updateUserDto:UpdateUserDto){ + const user = await this.userModel.findOne({ where: { id:userId } }); + + if (!user) { + throw new NotFoundException('User not found'); + } + + if (updateUserDto.password) { + updateUserDto.password = await bcrypt.hash(updateUserDto.password, 10); + } + + await user.update(updateUserDto); + return user; } }