From 5ef781657682c4c086f61db20c758922c1f2c13e Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:27:45 +0900 Subject: [PATCH 01/12] =?UTF-8?q?#60=20refactor:=20MemberRepository=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/domain/repository/MemberRepository.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/domain/repository/MemberRepository.java b/backend/src/main/java/com/postdm/backend/domain/member/domain/repository/MemberRepository.java index bf1b289..c9b3075 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/domain/repository/MemberRepository.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/domain/repository/MemberRepository.java @@ -4,10 +4,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface MemberRepository extends JpaRepository { boolean existsByEmail(String email); boolean existsByUsername(String username); - Member findByUsername(String username); + Optional findByUsername(String username); Member findByEmail(String email); } From 0d3a6bdccd19480d29586bebb0de746c08ce2e90 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:29:00 +0900 Subject: [PATCH 02/12] =?UTF-8?q?#60=20feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20Member=20=EC=A0=95=EB=B3=B4=20=EC=A0=80=EC=9E=A5=20DTO=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/dto/MemberPrincipalDto.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java new file mode 100644 index 0000000..5dfbeb1 --- /dev/null +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java @@ -0,0 +1,17 @@ +package com.postdm.backend.domain.member.dto; + +import com.postdm.backend.domain.member.domain.entity.MemberRole; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class MemberPrincipalDto { + + private Long id; + + private String nickname; + + private String username; + +} From 509278c10dfb04a3e11e8784346dbe6e6f09159f Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:29:40 +0900 Subject: [PATCH 03/12] =?UTF-8?q?#60=20feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20Member=20=EC=A0=95=EB=B3=B4=20DTO=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/member/dto/MemberInfoDto.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java new file mode 100644 index 0000000..4b3e30e --- /dev/null +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java @@ -0,0 +1,15 @@ +package com.postdm.backend.domain.member.dto; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class MemberInfoDto { + + private String nickname; + + private String username; + + private String phone; +} From d55b297434ab05cdee2f4b1c8ea706e89429fdb2 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:41:52 +0900 Subject: [PATCH 04/12] =?UTF-8?q?#60=20fix:=20JWT=20=ED=86=A0=ED=81=B0?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C,=20Member=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/jwt/util/JwtProvider.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java b/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java index de8a634..a2376f1 100644 --- a/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java +++ b/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java @@ -2,6 +2,9 @@ import com.postdm.backend.domain.member.domain.entity.Member; import com.postdm.backend.domain.member.domain.repository.MemberRepository; +import com.postdm.backend.domain.member.dto.MemberPrincipalDto; +import com.postdm.backend.global.common.exception.CustomException; +import com.postdm.backend.global.common.response.ErrorCode; import com.postdm.backend.global.jwt.dto.TokenInfo; import io.jsonwebtoken.*; import io.jsonwebtoken.security.SecurityException; @@ -110,15 +113,19 @@ public Authentication getAuthentication(String token) { // 토큰에서 사용 String role = claims.get("role", String.class); // role 추출 - Member member = memberRepository.findByUsername(username); - if (member == null) { - throw new RuntimeException("해당 사용자 정보를 찾을 수 없습니다."); - } + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); + + MemberPrincipalDto memberPrincipalDto = MemberPrincipalDto.builder() + .id(member.getId()) + .nickname(member.getNickname()) + .username(username) + .build(); List authorities = Collections.singletonList(new SimpleGrantedAuthority("ROLE_" + role)); // Spring Security에서 Authentication 객체의 principal을 Member 객체로 저장 - return new UsernamePasswordAuthenticationToken(member, "", authorities); + return new UsernamePasswordAuthenticationToken(memberPrincipalDto, "", authorities); } // JWT 토큰 만료 시간 반환 From 5ec18bcd2df4fe27cab0749093afce6aaca23e08 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:42:42 +0900 Subject: [PATCH 05/12] =?UTF-8?q?#60=20remove:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=EB=B3=80=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/postdm/backend/global/jwt/util/JwtProvider.java | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java b/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java index a2376f1..d4bb7ae 100644 --- a/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java +++ b/backend/src/main/java/com/postdm/backend/global/jwt/util/JwtProvider.java @@ -97,7 +97,6 @@ public boolean validateToken(String token) { // 토큰 유효성 검사 public TokenInfo generateToken(String username, String role) { // 토큰 생성 String accessToken = generateAccessToken(username, role); - String refreshToken = generateRefreshToken(username, role); return TokenInfo.builder() .grantType("Bearer") From 0f3ec9247f90c8ff75f40a64a924a4485d9f0587 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 00:50:36 +0900 Subject: [PATCH 06/12] =?UTF-8?q?#60=20fix:=20MemberInfoDto=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/postdm/backend/domain/member/dto/MemberInfoDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java index 4b3e30e..cb3f30f 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java @@ -9,7 +9,7 @@ public class MemberInfoDto { private String nickname; - private String username; + private String email; private String phone; } From 8dd47f63ef0c4d9a7aab39ba4dac22bb341eb94e Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 10:35:21 +0900 Subject: [PATCH 07/12] =?UTF-8?q?#60=20fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postdm/backend/domain/auth/application/AuthService.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/auth/application/AuthService.java b/backend/src/main/java/com/postdm/backend/domain/auth/application/AuthService.java index 3655e74..1f23f2a 100644 --- a/backend/src/main/java/com/postdm/backend/domain/auth/application/AuthService.java +++ b/backend/src/main/java/com/postdm/backend/domain/auth/application/AuthService.java @@ -117,10 +117,8 @@ public void signUp(SignUpRequestDto signUpRequestDto) { // 회원가입 서비 public TokenInfo signIn(SignInRequestDto signInRequestDto, HttpServletResponse response) { // 로그인 서비스 String username = signInRequestDto.getUsername(); - Member member = memberRepository.findByUsername(username); - if(member == null) { - throw new CustomException(ErrorCode.MEMBER_NOT_FOUND); - } + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); String password = signInRequestDto.getPassword(); String encodedPassword = member.getPassword(); From e78cd4e98bf6ee79672e85605736e0d7abc53fa3 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 10:36:41 +0900 Subject: [PATCH 08/12] =?UTF-8?q?#60=20feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/api/MemberController.java | 24 ++++++++-- .../member/application/MemberService.java | 44 ++++++++++++++++++- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java b/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java index 8ee49eb..de6cc62 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java @@ -5,6 +5,8 @@ import com.postdm.backend.domain.member.application.MemberService; import com.postdm.backend.domain.member.domain.entity.Member; import com.postdm.backend.domain.member.dto.FindUsernameRequestDto; +import com.postdm.backend.domain.member.dto.MemberInfoDto; +import com.postdm.backend.domain.member.dto.MemberPrincipalDto; import com.postdm.backend.domain.member.dto.ResetPasswordRequestDto; import com.postdm.backend.global.template.ResponseTemplate; import io.swagger.v3.oas.annotations.Operation; @@ -12,10 +14,8 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/v1/member") @@ -66,4 +66,20 @@ public ResponseTemplate resetPassword(@RequestBody @Valid ResetPasswordR return new ResponseTemplate<>(HttpStatus.OK, "비밀번호 변경 성공", member); } + + @GetMapping("/my-page") + public ResponseTemplate memberInfo(@AuthenticationPrincipal MemberPrincipalDto memberPrincipalDto) { + String username = memberPrincipalDto.getUsername(); + MemberInfoDto member = memberService.loadMemberInfo(username); + return new ResponseTemplate<>(HttpStatus.OK, "조회 성공", member); + } + + @PatchMapping("/my-page/edit") + public ResponseTemplate editMemberInfo(@AuthenticationPrincipal MemberPrincipalDto memberPrincipalDto, + @RequestBody MemberInfoDto memberInfoDto) { + String username = memberPrincipalDto.getUsername(); + memberService.updateMemberInfo(username, memberInfoDto); + + return new ResponseTemplate<>(HttpStatus.OK, "회원 정보 수정 성공"); + } } diff --git a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java index e8cb0ac..7bd6c0e 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java @@ -6,10 +6,18 @@ import com.postdm.backend.domain.member.dto.FindUsernameRequestDto; import com.postdm.backend.domain.member.domain.entity.Member; import com.postdm.backend.domain.member.domain.repository.MemberRepository; +import com.postdm.backend.domain.member.dto.MemberInfoDto; import com.postdm.backend.domain.member.dto.ResetPasswordRequestDto; +import com.postdm.backend.global.common.exception.CustomException; +import com.postdm.backend.global.common.response.ErrorCode; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class MemberService { @@ -51,7 +59,8 @@ public Member resetPassword(ResetPasswordRequestDto resetPasswordRequestDto) { throw new IllegalArgumentException(); } - Member member = memberRepository.findByUsername(username); + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); member.setPassword(encodedPassword); memberRepository.save(member); @@ -59,4 +68,37 @@ public Member resetPassword(ResetPasswordRequestDto resetPasswordRequestDto) { return member; } + + public MemberInfoDto loadMemberInfo(String username) { + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); + + return MemberInfoDto.builder(). + nickname(member.getNickname()). + email(member.getEmail()). + phone(member.getPhone()). + build(); + } + + public void updateMemberInfo(String username, MemberInfoDto memberInfoDto) { + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); + + List list = new ArrayList<>(); + list.add(memberInfoDto); + + for(int i = 0; i < list.size(); i++) { + if(list.get(i).getNickname() != null) { + member.setNickname(list.get(i).getNickname()); + }; + if(list.get(i).getEmail() != null) { + member.setEmail(list.get(i).getEmail()); + }; + if(list.get(i).getPhone() != null) { + member.setPhone(list.get(i).getPhone()); + }; + } + + memberRepository.save(member); + } } From 5705a184f9ed811e87506acf121fd9f8a6be7bf0 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Thu, 8 May 2025 10:37:32 +0900 Subject: [PATCH 09/12] =?UTF-8?q?#60=20fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=84=B8=EC=85=98=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postdm/backend/domain/auth/api/TestController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/auth/api/TestController.java b/backend/src/main/java/com/postdm/backend/domain/auth/api/TestController.java index a11a632..e2307d9 100644 --- a/backend/src/main/java/com/postdm/backend/domain/auth/api/TestController.java +++ b/backend/src/main/java/com/postdm/backend/domain/auth/api/TestController.java @@ -1,7 +1,9 @@ package com.postdm.backend.domain.auth.api; +import com.postdm.backend.domain.member.dto.MemberPrincipalDto; import com.postdm.backend.global.template.ResponseTemplate; import org.springframework.http.HttpStatus; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -9,11 +11,11 @@ @RestController public class TestController { // 현재 사용자 세션 확인용 테스트 컨트롤러 @GetMapping("/test") - public ResponseTemplate test() { - String username = SecurityContextHolder.getContext().getAuthentication().getName(); + public ResponseTemplate test(@AuthenticationPrincipal MemberPrincipalDto member) { + String nickname = member.getNickname(); String role = SecurityContextHolder.getContext().getAuthentication().getAuthorities().iterator().next().getAuthority(); - return new ResponseTemplate<>(HttpStatus.OK, "환영합니다, " + role + ", " + username + "님!", username); + return new ResponseTemplate<>(HttpStatus.OK, "환영합니다, " + role + ", " + nickname + "님!", nickname); } } From 6f4672e1ece626604b7fedaecaf855255a20f62d Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Fri, 9 May 2025 23:53:48 +0900 Subject: [PATCH 10/12] =?UTF-8?q?#60=20feat:=20=ED=9A=8C=EC=9B=90=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=88=98=EC=A0=95=20=EC=8B=9C,=20email=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20validation=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/member/application/MemberService.java | 3 ++- .../com/postdm/backend/domain/member/dto/MemberInfoDto.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java index 7bd6c0e..47e15bb 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java @@ -10,6 +10,7 @@ import com.postdm.backend.domain.member.dto.ResetPasswordRequestDto; import com.postdm.backend.global.common.exception.CustomException; import com.postdm.backend.global.common.response.ErrorCode; +import jakarta.validation.Valid; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -80,7 +81,7 @@ public MemberInfoDto loadMemberInfo(String username) { build(); } - public void updateMemberInfo(String username, MemberInfoDto memberInfoDto) { + public void updateMemberInfo(String username, @Valid MemberInfoDto memberInfoDto) { Member member = memberRepository.findByUsername(username) .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java index cb3f30f..b2971af 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java @@ -1,5 +1,6 @@ package com.postdm.backend.domain.member.dto; +import jakarta.validation.constraints.Email; import lombok.Builder; import lombok.Data; @@ -9,6 +10,7 @@ public class MemberInfoDto { private String nickname; + @Email private String email; private String phone; From 2ef6751b5f6b5f4bdae2114e2dffe858b4d8a14b Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Mon, 12 May 2025 13:49:48 +0900 Subject: [PATCH 11/12] =?UTF-8?q?#60=20feat:=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EA=B0=92=EC=97=90=20=EB=8C=80=ED=95=9C=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberService.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java index 47e15bb..1260a61 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/application/MemberService.java @@ -88,15 +88,24 @@ public void updateMemberInfo(String username, @Valid MemberInfoDto memberInfoDto List list = new ArrayList<>(); list.add(memberInfoDto); - for(int i = 0; i < list.size(); i++) { - if(list.get(i).getNickname() != null) { - member.setNickname(list.get(i).getNickname()); + for (MemberInfoDto infoDto : list) { + if (infoDto.getNickname() != null) { + if (infoDto.getNickname().isEmpty()) { + throw new CustomException(ErrorCode.VALIDATION_FAIL); + } + member.setNickname(infoDto.getNickname()); }; - if(list.get(i).getEmail() != null) { - member.setEmail(list.get(i).getEmail()); + if (infoDto.getEmail() != null) { + if(infoDto.getEmail().isEmpty()) { + throw new CustomException(ErrorCode.VALIDATION_FAIL); + } + member.setEmail(infoDto.getEmail()); }; - if(list.get(i).getPhone() != null) { - member.setPhone(list.get(i).getPhone()); + if (infoDto.getPhone() != null) { + if (infoDto.getPhone().isEmpty()) { + throw new CustomException(ErrorCode.VALIDATION_FAIL); + } + member.setPhone(infoDto.getPhone()); }; } From 45fb248ff6d844267bd52d8057c625bfc934efd6 Mon Sep 17 00:00:00 2001 From: Etwashoeren Date: Mon, 12 May 2025 13:50:16 +0900 Subject: [PATCH 12/12] =?UTF-8?q?#60=20feat:=20Swagger=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/member/api/MemberController.java | 10 +++++++++- .../backend/domain/member/dto/MemberInfoDto.java | 5 +++++ .../backend/domain/member/dto/MemberPrincipalDto.java | 4 +++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java b/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java index de6cc62..73108e4 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/api/MemberController.java @@ -67,6 +67,10 @@ public ResponseTemplate resetPassword(@RequestBody @Valid ResetPasswordR return new ResponseTemplate<>(HttpStatus.OK, "비밀번호 변경 성공", member); } + @Operation(summary = "마이페이지 조회 컨트롤러") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공"), + }) @GetMapping("/my-page") public ResponseTemplate memberInfo(@AuthenticationPrincipal MemberPrincipalDto memberPrincipalDto) { String username = memberPrincipalDto.getUsername(); @@ -74,9 +78,13 @@ public ResponseTemplate memberInfo(@AuthenticationPrincipal Membe return new ResponseTemplate<>(HttpStatus.OK, "조회 성공", member); } + @Operation(summary = "마이페이지 수정 컨트롤러") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공"), + }) @PatchMapping("/my-page/edit") public ResponseTemplate editMemberInfo(@AuthenticationPrincipal MemberPrincipalDto memberPrincipalDto, - @RequestBody MemberInfoDto memberInfoDto) { + @RequestBody @Valid MemberInfoDto memberInfoDto) { String username = memberPrincipalDto.getUsername(); memberService.updateMemberInfo(username, memberInfoDto); diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java index b2971af..e0855eb 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberInfoDto.java @@ -1,17 +1,22 @@ package com.postdm.backend.domain.member.dto; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; import lombok.Builder; import lombok.Data; +@Schema(description = "마이페이지 정보 DTO") @Data @Builder public class MemberInfoDto { + @Schema(description = "사용자 이름", example = "홍길동") private String nickname; + @Schema(description = "사용자 이메일", example = "test1@test.com") @Email private String email; + @Schema(description = "사용자 전화번호", example = "01012345678") private String phone; } diff --git a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java index 5dfbeb1..1b5f838 100644 --- a/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java +++ b/backend/src/main/java/com/postdm/backend/domain/member/dto/MemberPrincipalDto.java @@ -1,6 +1,6 @@ package com.postdm.backend.domain.member.dto; -import com.postdm.backend.domain.member.domain.entity.MemberRole; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Data; @@ -10,8 +10,10 @@ public class MemberPrincipalDto { private Long id; + @Schema(description = "사용자 이름", example = "홍길동") private String nickname; + @Schema(description = "사용자 아이디", example = "test123") private String username; }