Skip to content

Commit 5dd1b3b

Browse files
committed
implement update user
1 parent c694111 commit 5dd1b3b

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

src/users/dto/update-user.dto.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { Gender } from './../../shared/enum/gender';
2+
import { ApiModelProperty } from '@nestjs/swagger';
3+
import { IsOptional, IsString, IsEnum, IsISO8601 } from 'class-validator';
4+
5+
export class UpdateUserDto {
6+
@ApiModelProperty()
7+
@IsOptional()
8+
@IsString()
9+
readonly firstName: string;
10+
11+
@ApiModelProperty()
12+
@IsOptional()
13+
@IsString()
14+
readonly lastName: string;
15+
16+
@ApiModelProperty()
17+
@IsOptional()
18+
@IsEnum(Gender)
19+
readonly gender: Gender;
20+
21+
@ApiModelProperty()
22+
@IsOptional()
23+
@IsISO8601()
24+
readonly birthday: string;
25+
}

src/users/users.controller.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import {
88
Delete,
99
Req,
1010
UseGuards,
11+
Put,
1112
} from '@nestjs/common';
1213
import { CreateUserDto } from './dto/create-user.dto';
1314
import { UsersService } from './users.service';
1415
import { UserDto } from './dto/user.dto';
1516
import { ApiUseTags, ApiOkResponse, ApiBearerAuth } from '@nestjs/swagger';
1617
import { UserLoginResponseDto } from './dto/user-login-response.dto';
1718
import { AuthGuard } from '@nestjs/passport';
19+
import { UpdateUserDto } from './dto/update-user.dto';
1820

1921
@Controller('users')
2022
@ApiUseTags('users')
@@ -32,7 +34,7 @@ export class UsersController {
3234
@Post('login')
3335
@HttpCode(200)
3436
@ApiOkResponse({ type: UserLoginResponseDto })
35-
async login(
37+
login(
3638
@Body() userLoginRequestDto: UserLoginRequestDto,
3739
): Promise<UserLoginResponseDto> {
3840
return this.usersService.login(userLoginRequestDto);
@@ -46,11 +48,22 @@ export class UsersController {
4648
return this.usersService.findAll();
4749
}
4850

51+
@Put('me')
52+
@ApiBearerAuth()
53+
@UseGuards(AuthGuard('jwt'))
54+
@ApiOkResponse({ type: UserDto })
55+
update(
56+
@Body() updateUserDto: UpdateUserDto,
57+
@Req() request,
58+
): Promise<UserDto> {
59+
return this.usersService.update(request.user.id, updateUserDto);
60+
}
61+
4962
@Delete()
5063
@ApiBearerAuth()
5164
@UseGuards(AuthGuard('jwt'))
5265
@ApiOkResponse({ type: UserDto })
53-
async delete(@Req() request): Promise<UserDto> {
54-
return await this.usersService.delete(request.user.id);
66+
delete(@Req() request): Promise<UserDto> {
67+
return this.usersService.delete(request.user.id);
5568
}
5669
}

src/users/users.service.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { CreateUserDto } from './dto/create-user.dto';
77
import { UserLoginResponseDto } from './dto/user-login-response.dto';
88
import { JwtPayload } from './auth/jwt-payload.model';
99
import { sign } from 'jsonwebtoken';
10+
import { UpdateUserDto } from './dto/update-user.dto';
1011

1112
@Injectable()
1213
export class UsersService {
@@ -87,6 +88,25 @@ export class UsersService {
8788
return new UserLoginResponseDto(user, token);
8889
}
8990

91+
async update(id: string, updateUserDto: UpdateUserDto): Promise<UserDto> {
92+
const user = await this.usersRepository.findByPk<User>(id);
93+
if (!user) {
94+
throw new HttpException('User not found.', HttpStatus.NOT_FOUND);
95+
}
96+
97+
user.firstName = updateUserDto.firstName || user.firstName;
98+
user.lastName = updateUserDto.lastName || user.lastName;
99+
user.gender = updateUserDto.gender || user.gender;
100+
user.birthday = updateUserDto.birthday || user.birthday;
101+
102+
try {
103+
const data = await user.save();
104+
return new UserDto(data);
105+
} catch (err) {
106+
throw new HttpException(err, HttpStatus.INTERNAL_SERVER_ERROR);
107+
}
108+
}
109+
90110
async delete(id: string): Promise<UserDto> {
91111
const user = await this.usersRepository.findByPk<User>(id);
92112
await user.destroy();

0 commit comments

Comments
 (0)