diff --git a/src/user/dto/response/withdrawal-user-response.dto.ts b/src/user/dto/response/withdrawal-user-response.dto.ts new file mode 100644 index 0000000..9758618 --- /dev/null +++ b/src/user/dto/response/withdrawal-user-response.dto.ts @@ -0,0 +1,6 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class WithdrawalUserResponse { + @ApiProperty({ description: '회원 탈퇴 여부', example: true }) + isUserWithdraw: boolean; +} diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts index 8c56937..4e836f9 100644 --- a/src/user/user.controller.ts +++ b/src/user/user.controller.ts @@ -105,4 +105,17 @@ export class UserController { GlobalResponseCode.OK, ); } + + @Post('withdrawal') + @UseGuards(JwtAuthGuard) + @ApiOperation({ + summary: '회원 탈퇴', + description: '현재 회원을 탈퇴시킵니다.', + }) + @ApiOkResponse({ type: FindingPasswordResponse, description: '임시 비밀번호 전송 완료' }) + @ApiBearerAuth() + async withdrawalUser(@ExtractPayload() userId: number) { + const userStatus = await this.userService.withdrawalUser(userId); + return BaseResponse.of(UserConverter.toWithdrawalUserResponse(userStatus)); + } } diff --git a/src/user/user.converter.ts b/src/user/user.converter.ts index d9e6885..c30d601 100644 --- a/src/user/user.converter.ts +++ b/src/user/user.converter.ts @@ -10,6 +10,7 @@ import { Password } from './entity/password'; import { UserReport } from './entity/user-report.entity'; import { User } from './entity/user.entity'; import { UserReportReason } from './enum/user-report-reason'; +import { WithdrawalUserResponse } from './dto/response/withdrawal-user-response.dto'; @Injectable() export class UserConverter implements OnModuleInit { @@ -57,4 +58,10 @@ export class UserConverter implements OnModuleInit { public static toFindingPasswordResponse(isPasswordSended: boolean): FindingPasswordResponse { return Builder(FindingPasswordResponse).isPasswordSended(isPasswordSended).build(); } + + public static toWithdrawalUserResponse(userStatus: User) { + return Builder(WithdrawalUserResponse) + .isUserWithdraw(userStatus.disabledAt ? true : false) + .build(); + } } diff --git a/src/user/user.service.ts b/src/user/user.service.ts index 931a8d3..e706587 100644 --- a/src/user/user.service.ts +++ b/src/user/user.service.ts @@ -87,4 +87,12 @@ export class UserService { async sendEmail(request: FindingPasswordRequest, password: string): Promise { await this.mailService.sendMail(request.email, '[BookJam] 임시 비밀번호 안내', password); } + + async withdrawalUser(userId: number): Promise { + const user: User = await this.userRepository.findOneBy({ userId }); + user.disabledAt = new Date(); + await this.userRepository.update(userId, user); + + return user; + } }