-
Notifications
You must be signed in to change notification settings - Fork 0
[FEAT] 회원 정보 수정 #63
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEAT] 회원 정보 수정 #63
Changes from 2 commits
2e413c7
2534429
d5fccbc
270d93c
193f9a1
55c7e03
e40e4b7
ff5d805
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| package com.example.FixLog.controller; | ||
|
|
||
| import com.example.FixLog.dto.Response; | ||
| import com.example.FixLog.dto.member.edit.EditNicknameRequestDto; | ||
| import com.example.FixLog.dto.member.edit.EditPasswordRequestDto; | ||
| import com.example.FixLog.dto.member.edit.EditProfileImageRequestDto; | ||
| import com.example.FixLog.dto.member.edit.EditBioRequestDto; | ||
| import com.example.FixLog.service.MemberService; | ||
| import com.example.FixLog.domain.member.Member; | ||
| import lombok.RequiredArgsConstructor; | ||
| import org.springframework.http.ResponseEntity; | ||
| import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
| import org.springframework.security.core.userdetails.UserDetails; | ||
| import org.springframework.web.bind.annotation.PatchMapping; | ||
| import org.springframework.web.bind.annotation.RequestBody; | ||
| import org.springframework.web.bind.annotation.RequestMapping; | ||
| import org.springframework.web.bind.annotation.RestController; | ||
|
|
||
| @RestController | ||
| @RequiredArgsConstructor | ||
| @RequestMapping("/mypage") | ||
| public class MypageMemberController { | ||
|
|
||
| private final MemberService memberService; | ||
|
|
||
| @PatchMapping("/members/nickname") | ||
| public ResponseEntity<Response<String>> editNickname( | ||
| @RequestBody EditNicknameRequestDto requestDto | ||
| ) { | ||
| Member member = memberService.getCurrentMemberInfo(); | ||
| memberService.editNickname(member, requestDto.getNickname()); | ||
| return ResponseEntity.ok(Response.success("닉네임 수정 성공", null)); | ||
| } | ||
|
|
||
| @PatchMapping("/members/password") | ||
| public ResponseEntity<Response<Void>> editPassword( | ||
| @AuthenticationPrincipal UserDetails userDetails, | ||
| @RequestBody EditPasswordRequestDto requestDto | ||
| ) { | ||
| Member member = memberService.getCurrentMemberInfo(); | ||
| memberService.editPassword(member, requestDto); | ||
| return ResponseEntity.ok(Response.success("비밀번호 변경 성공", null)); | ||
| } | ||
|
|
||
| @PatchMapping("/members/profile-image") | ||
| public ResponseEntity<Response<String>> editProfileImage( | ||
| @RequestBody EditProfileImageRequestDto requestDto | ||
| ) { | ||
| Member member = memberService.getCurrentMemberInfo(); | ||
| memberService.editProfileImage(member, requestDto.getProfileImageUrl()); | ||
| return ResponseEntity.ok(Response.success("프로필 이미지 수정 성공", null)); | ||
| } | ||
|
|
||
| @PatchMapping("/members/bio") | ||
| public ResponseEntity<Response<String>> editBio( | ||
| @RequestBody EditBioRequestDto requestDto | ||
| ) { | ||
| Member member = memberService.getCurrentMemberInfo(); | ||
| memberService.editBio(member, requestDto.getBio()); | ||
| return ResponseEntity.ok(Response.success("소개글 수정 성공", null)); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| package com.example.FixLog.dto; | ||
|
|
||
| import lombok.Getter; | ||
|
|
||
| @Getter | ||
| public class WithdrawRequestDto { | ||
| private String password; | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,6 +1,9 @@ | ||||||||||||||||||||||||||||||||
| package com.example.FixLog.dto.member; | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| import com.example.FixLog.domain.member.Member; | ||||||||||||||||||||||||||||||||
| import com.example.FixLog.domain.member.SocialType; | ||||||||||||||||||||||||||||||||
| import com.example.FixLog.util.DefaultImage; | ||||||||||||||||||||||||||||||||
| import com.example.FixLog.util.DefaultText; | ||||||||||||||||||||||||||||||||
| import lombok.AllArgsConstructor; | ||||||||||||||||||||||||||||||||
| import lombok.Getter; | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|
@@ -12,4 +15,18 @@ public class MemberInfoResponseDto { | |||||||||||||||||||||||||||||||
| private String profileImageUrl; | ||||||||||||||||||||||||||||||||
| private String bio; | ||||||||||||||||||||||||||||||||
| private SocialType socialType; | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| public static MemberInfoResponseDto from(Member member) { | ||||||||||||||||||||||||||||||||
| return new MemberInfoResponseDto( | ||||||||||||||||||||||||||||||||
| member.getEmail(), | ||||||||||||||||||||||||||||||||
| member.getNickname(), | ||||||||||||||||||||||||||||||||
| member.getProfileImageUrl() != null | ||||||||||||||||||||||||||||||||
| ? member.getProfileImageUrl() | ||||||||||||||||||||||||||||||||
| : DefaultImage.PROFILE, | ||||||||||||||||||||||||||||||||
| member.getBio() != null | ||||||||||||||||||||||||||||||||
| ? member.getBio() | ||||||||||||||||||||||||||||||||
| : DefaultText.BIO, | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
| member.getSocialType() | ||||||||||||||||||||||||||||||||
| ); | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
| public static MemberInfoResponseDto from(Member member) { | |
| return new MemberInfoResponseDto( | |
| member.getEmail(), | |
| member.getNickname(), | |
| member.getProfileImageUrl() != null | |
| ? member.getProfileImageUrl() | |
| : DefaultImage.PROFILE, | |
| member.getBio() != null | |
| ? member.getBio() | |
| : DefaultText.BIO, | |
| member.getSocialType() | |
| ); | |
| } | |
| // In MemberController.java, inside getMyInfo(): | |
| MemberInfoResponseDto responseDto = MemberInfoResponseDto.from(member); |
🤖 Prompt for AI Agents
In src/main/java/com/example/FixLog/dto/member/MemberInfoResponseDto.java lines
19 to 31, the static factory method correctly handles null values with default
constants. To fix the issue, update the MemberController.getMyInfo method to use
this factory method when creating MemberInfoResponseDto instances. This will
ensure consistent default value handling and avoid duplication of null checks
across the codebase.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| package com.example.FixLog.dto.member.edit; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.NoArgsConstructor; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
|
||
| @NoArgsConstructor | ||
| public class EditBioRequestDto { | ||
| private String bio; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| package com.example.FixLog.dto.member.edit; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.NoArgsConstructor; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
| @NoArgsConstructor | ||
| public class EditNicknameRequestDto { | ||
| private String nickname; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| package com.example.FixLog.dto.member.edit; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.NoArgsConstructor; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
| @NoArgsConstructor | ||
| public class EditPasswordRequestDto { | ||
| private String currentPassword; | ||
| private String newPassword; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| package com.example.FixLog.dto.member.edit; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.NoArgsConstructor; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
| @NoArgsConstructor | ||
| public class EditProfileImageRequestDto { | ||
| private String profileImageUrl; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@AuthenticationPrincipal UserDetails userDetails 이거랑 Member member = memberService.getCurrentMemberInfo(); 이거는 둘 중에 하나만 사용해도 되지 않나요?
저는 매개변수에 @AuthenticationPrincipal 사용은 안하고 서비스 단에서 member 객체 불러와서 사용하도록 했거든요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 인증 관련 처리를 컨트롤러에서 분리하고자 @AuthenticationPrincipal은 사용하지 않고, 서비스 단에서 SecurityContextHolder를 활용해 getCurrentMemberInfo()로 인증된 회원 정보를 가져오도록 통일했습니다. 확인 부탁드립니다!!