diff --git a/src/main/java/org/cotato/csquiz/api/member/controller/MemberController.java b/src/main/java/org/cotato/csquiz/api/member/controller/MemberController.java index 47217db7..8b1b9873 100644 --- a/src/main/java/org/cotato/csquiz/api/member/controller/MemberController.java +++ b/src/main/java/org/cotato/csquiz/api/member/controller/MemberController.java @@ -1,13 +1,16 @@ package org.cotato.csquiz.api.member.controller; +import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.cotato.csquiz.api.admin.dto.MemberInfoResponse; import org.cotato.csquiz.api.member.dto.MemberMyPageInfoResponse; import org.cotato.csquiz.api.member.dto.UpdatePasswordRequest; +import org.cotato.csquiz.api.member.dto.UpdatePhoneNumberRequest; import org.cotato.csquiz.common.config.jwt.JwtTokenProvider; import org.cotato.csquiz.domain.auth.service.MemberService; +import org.springframework.context.annotation.Description; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -42,6 +45,16 @@ public ResponseEntity updatePassword(@RequestHeader("Authorization") Strin return ResponseEntity.noContent().build(); } + @Operation(summary = "멤버 전화번호 수정", description = "멤버 전화번호 수정하기") + @PatchMapping("/phone-number") + public ResponseEntity updatePhoneNumber( + @RequestHeader("Authorization") String authorizationHeader, + @RequestBody @Valid UpdatePhoneNumberRequest request) { + String accessToken = jwtTokenProvider.getBearer(authorizationHeader); + memberService.updatePhoneNumber(accessToken,request.phoneNumber()); + return ResponseEntity.noContent().build(); + } + @GetMapping("/{memberId}/mypage") public ResponseEntity findMyPageInfo(@PathVariable("memberId") Long memberId) { return ResponseEntity.ok().body(memberService.findMyPageInfo(memberId)); diff --git a/src/main/java/org/cotato/csquiz/api/member/dto/UpdatePhoneNumberRequest.java b/src/main/java/org/cotato/csquiz/api/member/dto/UpdatePhoneNumberRequest.java new file mode 100644 index 00000000..eedc67f3 --- /dev/null +++ b/src/main/java/org/cotato/csquiz/api/member/dto/UpdatePhoneNumberRequest.java @@ -0,0 +1,11 @@ +package org.cotato.csquiz.api.member.dto; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +public record UpdatePhoneNumberRequest( + @NotNull(message = "전화번호를 입력해주세요.") + @Size(min = 11, max = 11, message = "'-'없이 11자리의 전화번호를 입력해주세요.") + String phoneNumber +) { +} diff --git a/src/main/java/org/cotato/csquiz/domain/auth/entity/Member.java b/src/main/java/org/cotato/csquiz/domain/auth/entity/Member.java index 9b5befca..4dc0c4c5 100644 --- a/src/main/java/org/cotato/csquiz/domain/auth/entity/Member.java +++ b/src/main/java/org/cotato/csquiz/domain/auth/entity/Member.java @@ -75,6 +75,10 @@ public void updateGeneration(Integer passedGenerationNumber) { this.passedGenerationNumber = passedGenerationNumber; } + public void updatePhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + public void updatePosition(MemberPosition position) { this.position = position; } diff --git a/src/main/java/org/cotato/csquiz/domain/auth/service/MemberService.java b/src/main/java/org/cotato/csquiz/domain/auth/service/MemberService.java index 62d303af..ea466e33 100644 --- a/src/main/java/org/cotato/csquiz/domain/auth/service/MemberService.java +++ b/src/main/java/org/cotato/csquiz/domain/auth/service/MemberService.java @@ -6,6 +6,7 @@ import org.cotato.csquiz.api.admin.dto.MemberInfoResponse; import org.cotato.csquiz.api.member.dto.MemberInfo; import org.cotato.csquiz.api.member.dto.MemberMyPageInfoResponse; +import org.cotato.csquiz.api.member.dto.UpdatePhoneNumberRequest; import org.cotato.csquiz.common.config.jwt.JwtTokenProvider; import org.cotato.csquiz.domain.auth.entity.Member; import org.cotato.csquiz.common.error.exception.AppException; @@ -60,6 +61,16 @@ private void validateIsSameBefore(String originPassword, String newPassword) { } } + @Transactional + public void updatePhoneNumber(String accessToken, String phoneNumber) { + Long memberId = jwtTokenProvider.getMemberId(accessToken); + Member findMember = memberRepository.findById(memberId) + .orElseThrow(() -> new EntityNotFoundException("해당 회원을 찾을 수 없습니다.")); + + String encryptedPhoneNumber = encryptService.encryptPhoneNumber(phoneNumber); + findMember.updatePhoneNumber(encryptedPhoneNumber); + } + public MemberMyPageInfoResponse findMyPageInfo(Long memberId) { Member findMember = memberRepository.findById(memberId) .orElseThrow(() -> new EntityNotFoundException("해당 회원을 찾을 수 없습니다."));