From 1efaff906d24f2632d78a78a956c908bf426a369 Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Tue, 29 Apr 2025 01:01:37 +0900 Subject: [PATCH 1/6] =?UTF-8?q?(=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onebridge/ouch/controller/mypage/MypageController.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java diff --git a/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java new file mode 100644 index 0000000..f098805 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java @@ -0,0 +1,4 @@ +package com.onebridge.ouch.controller.mypage; + +public class MypageController { +} From 5f91355f2239957276113c8fc2639fc566ac48e5 Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Tue, 29 Apr 2025 01:06:38 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[FEAT]=20MypageController(=EB=A7=8C)=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/onebridge/ouch/controller/mypage/MypageController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java index f098805..fc4bc85 100644 --- a/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java +++ b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java @@ -1,4 +1,7 @@ package com.onebridge.ouch.controller.mypage; +import org.springframework.web.bind.annotation.RestController; + +@RestController public class MypageController { } From 215cd045e436e412f474b582fa63ed6b79919baa Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Thu, 1 May 2025 00:54:59 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[FEAT]=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20profile=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mypage/MypageController.java | 40 +++++++++++++++ .../ouch/converter/MypageConverter.java | 30 +++++++++++ .../request/MypageProfileUpdateRequest.java | 31 ++++++++++++ .../response/MypageGetProfileResponse.java | 23 +++++++++ .../ouch/service/mypage/MypageService.java | 50 +++++++++++++++++++ 5 files changed, 174 insertions(+) create mode 100644 src/main/java/com/onebridge/ouch/converter/MypageConverter.java create mode 100644 src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java create mode 100644 src/main/java/com/onebridge/ouch/dto/mypage/response/MypageGetProfileResponse.java create mode 100644 src/main/java/com/onebridge/ouch/service/mypage/MypageService.java diff --git a/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java index fc4bc85..d977f71 100644 --- a/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java +++ b/src/main/java/com/onebridge/ouch/controller/mypage/MypageController.java @@ -1,7 +1,47 @@ package com.onebridge.ouch.controller.mypage; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.onebridge.ouch.apiPayload.ApiResponse; +import com.onebridge.ouch.dto.mypage.request.MypageProfileUpdateRequest; +import com.onebridge.ouch.dto.mypage.response.MypageGetProfileResponse; +import com.onebridge.ouch.security.authorization.UserId; +import com.onebridge.ouch.service.mypage.MypageService; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +@Tag(name = "마이페이지 API", description = "마이페이지 API") @RestController +@RequestMapping("/mypage") +@RequiredArgsConstructor public class MypageController { + + private final MypageService mypageService; + + //마이페이지-프로필 조회 + @Operation(summary = "프로필 조회 API", description = "프로필 조회 API 입니다.") + @GetMapping("/profile") + public ResponseEntity> mypageGetProfile(@UserId Long userId) { + MypageGetProfileResponse response = mypageService.mypageGetProfile(userId); + return ResponseEntity.ok(ApiResponse.success(response)); + } + + //마이페이지-프로필 수정 + @Operation(summary = "프로필 수정 API", description = "프로필 수정 API 입니다.") + @PutMapping("/profile") + public ResponseEntity> mypageUpdateProfile( + @RequestBody @Valid MypageProfileUpdateRequest request, + @UserId Long userId + ) { + mypageService.mypageUpdateProfile(userId, request); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } } diff --git a/src/main/java/com/onebridge/ouch/converter/MypageConverter.java b/src/main/java/com/onebridge/ouch/converter/MypageConverter.java new file mode 100644 index 0000000..ead3482 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/converter/MypageConverter.java @@ -0,0 +1,30 @@ +package com.onebridge.ouch.converter; + +import org.springframework.stereotype.Component; + +import com.onebridge.ouch.domain.Language; +import com.onebridge.ouch.domain.Nation; +import com.onebridge.ouch.domain.User; +import com.onebridge.ouch.dto.mypage.request.MypageProfileUpdateRequest; +import com.onebridge.ouch.dto.mypage.response.MypageGetProfileResponse; + +@Component +public class MypageConverter { + + public MypageGetProfileResponse userToMypageGetProfileResponse(User user) { + return new MypageGetProfileResponse(user.getNickname(), user.getGender(), user.getNation().getName(), + user.getPhoneNumber(), user.getEmail(), user.getLanguage().getName()); + } + + public User updateUserByUpdateProfileRequest(User user, MypageProfileUpdateRequest request, Nation nation, + Language language) { + return user.toBuilder() + .nickname(request.getNickname()) + .phoneNumber(request.getPhoneNumber()) + .gender(request.getGender()) + .email(request.getEmail()) + .nation(nation) + .language(language) + .build(); + } +} diff --git a/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java b/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java new file mode 100644 index 0000000..74ddcf8 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java @@ -0,0 +1,31 @@ +package com.onebridge.ouch.dto.mypage.request; + +import com.onebridge.ouch.domain.enums.Gender; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class MypageProfileUpdateRequest { + + @NotBlank(message = "Nickname is mandatory.") + private String nickname; + + @NotNull(message = "Gender is mandatory.") + private Gender gender; + + @NotNull(message = "Nation is mandatory.") + private Long nationId; //사용자가 직접 입력 or 드랍다운에서 선택..? + + @NotBlank(message = "Phone number is mandatory.") + private String phoneNumber; + + @NotBlank(message = "Email is mandatory.") + private String email; + + @NotNull(message = "Language is mandatory.") + private Long languageId; //사용자가 직접 입력 or 드랍다운에서 선택..? +} diff --git a/src/main/java/com/onebridge/ouch/dto/mypage/response/MypageGetProfileResponse.java b/src/main/java/com/onebridge/ouch/dto/mypage/response/MypageGetProfileResponse.java new file mode 100644 index 0000000..3c1fad3 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/dto/mypage/response/MypageGetProfileResponse.java @@ -0,0 +1,23 @@ +package com.onebridge.ouch.dto.mypage.response; + +import com.onebridge.ouch.domain.enums.Gender; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MypageGetProfileResponse { + + private String nickname; + + private Gender gender; + + private String nation; + + private String phoneNumber; + + private String email; + + private String language; +} diff --git a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java new file mode 100644 index 0000000..2a91ab6 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java @@ -0,0 +1,50 @@ +package com.onebridge.ouch.service.mypage; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.onebridge.ouch.apiPayload.code.error.CommonErrorCode; +import com.onebridge.ouch.apiPayload.exception.OuchException; +import com.onebridge.ouch.converter.MypageConverter; +import com.onebridge.ouch.domain.Language; +import com.onebridge.ouch.domain.Nation; +import com.onebridge.ouch.domain.User; +import com.onebridge.ouch.dto.mypage.request.MypageProfileUpdateRequest; +import com.onebridge.ouch.dto.mypage.response.MypageGetProfileResponse; +import com.onebridge.ouch.repository.language.LanguageRepository; +import com.onebridge.ouch.repository.nation.NationRepository; +import com.onebridge.ouch.repository.user.UserRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class MypageService { + private final UserRepository userRepository; + private final NationRepository nationRepository; + private final MypageConverter mypageConverter; + private final LanguageRepository languageRepository; + + @Transactional(readOnly = true) + public MypageGetProfileResponse mypageGetProfile(Long userId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new RuntimeException("User not found")); + return mypageConverter.userToMypageGetProfileResponse(user); + } + + @Transactional + public void mypageUpdateProfile(Long userId, MypageProfileUpdateRequest request) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); + + Nation nation = nationRepository.findById(request.getNationId()) + .orElseThrow(() -> new OuchException(CommonErrorCode.NATION_NOT_FOUND)); + + Language language = languageRepository.findById(request.getLanguageId()) + .orElseThrow(() -> new OuchException(CommonErrorCode.LANGUAGE_NOT_FOUND)); + + User updatedUser = mypageConverter.updateUserByUpdateProfileRequest(user, request, nation, language); + userRepository.save(updatedUser); + } + +} From 774c5c83fbc78832a31a8fc962048313d8cafbd7 Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Thu, 1 May 2025 01:00:35 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[CHORE]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20dto=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/MypageUserInfoUpdateRequest.java | 31 ------------------- .../ouch/service/mypage/MypageService.java | 1 + 2 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 src/main/java/com/onebridge/ouch/dto/user/request/MypageUserInfoUpdateRequest.java diff --git a/src/main/java/com/onebridge/ouch/dto/user/request/MypageUserInfoUpdateRequest.java b/src/main/java/com/onebridge/ouch/dto/user/request/MypageUserInfoUpdateRequest.java deleted file mode 100644 index ae24c97..0000000 --- a/src/main/java/com/onebridge/ouch/dto/user/request/MypageUserInfoUpdateRequest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.onebridge.ouch.dto.user.request; - -import com.onebridge.ouch.domain.enums.Gender; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor -@Getter -public class MypageUserInfoUpdateRequest { - - @NotBlank(message = "Nickname is mandatory") - @Size(max = 20, message = "Nickname must be 20 characters or less") - private String nickname; - - @NotBlank(message = "Phone number is mandatory") - @Size(max = 15, message = "Phone number must be 15 characters or less") - private String phoneNumber; - - @NotNull(message = "Gender is mandatory") - private Gender gender; - - @NotBlank(message = "Email is mandatory") - @Size(max = 30, message = "Email must be 30 characters or less") - private String email; - - private Long nationId; -} diff --git a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java index 2a91ab6..d143acc 100644 --- a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java +++ b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java @@ -20,6 +20,7 @@ @Service @RequiredArgsConstructor public class MypageService { + private final UserRepository userRepository; private final NationRepository nationRepository; private final MypageConverter mypageConverter; From b4d565e3d3ae1650a9a9f938a1785b2a16097019 Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Thu, 1 May 2025 02:15:15 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[CHORE]=20profile=20=EC=88=98=EC=A0=95=20ap?= =?UTF-8?q?i=20=EC=88=98=EC=A0=95=20-=EC=88=98=EC=A0=95=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=8B=9C=20=EA=B5=AD=EA=B0=80,=20=EC=96=B8=EC=96=B4?= =?UTF-8?q?=EB=A5=BC=20code=20=EB=A1=9C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20dt?= =?UTF-8?q?o(MypageProfileUpdateRequest)=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/mypage/request/MypageProfileUpdateRequest.java | 7 +++++-- .../com/onebridge/ouch/service/mypage/MypageService.java | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java b/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java index 74ddcf8..82622f0 100644 --- a/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java +++ b/src/main/java/com/onebridge/ouch/dto/mypage/request/MypageProfileUpdateRequest.java @@ -2,6 +2,7 @@ import com.onebridge.ouch.domain.enums.Gender; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -18,7 +19,8 @@ public class MypageProfileUpdateRequest { private Gender gender; @NotNull(message = "Nation is mandatory.") - private Long nationId; //사용자가 직접 입력 or 드랍다운에서 선택..? + @Schema(example = "KO") + private String nationCode; @NotBlank(message = "Phone number is mandatory.") private String phoneNumber; @@ -27,5 +29,6 @@ public class MypageProfileUpdateRequest { private String email; @NotNull(message = "Language is mandatory.") - private Long languageId; //사용자가 직접 입력 or 드랍다운에서 선택..? + @Schema(example = "kr") + private String languageCode; } diff --git a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java index d143acc..238bf74 100644 --- a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java +++ b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java @@ -38,10 +38,10 @@ public void mypageUpdateProfile(Long userId, MypageProfileUpdateRequest request) User user = userRepository.findById(userId) .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); - Nation nation = nationRepository.findById(request.getNationId()) + Nation nation = nationRepository.findByCode(request.getNationCode()) .orElseThrow(() -> new OuchException(CommonErrorCode.NATION_NOT_FOUND)); - Language language = languageRepository.findById(request.getLanguageId()) + Language language = languageRepository.findByCode(request.getLanguageCode()) .orElseThrow(() -> new OuchException(CommonErrorCode.LANGUAGE_NOT_FOUND)); User updatedUser = mypageConverter.updateUserByUpdateProfileRequest(user, request, nation, language); From bd1bce2359a31cd88bf6bc867b14aec0aa1e9233 Mon Sep 17 00:00:00 2001 From: kdy2224 Date: Fri, 9 May 2025 01:57:33 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[CHORE]=20MypageService=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/onebridge/ouch/service/mypage/MypageService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java index 238bf74..c20e2ed 100644 --- a/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java +++ b/src/main/java/com/onebridge/ouch/service/mypage/MypageService.java @@ -29,7 +29,7 @@ public class MypageService { @Transactional(readOnly = true) public MypageGetProfileResponse mypageGetProfile(Long userId) { User user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("User not found")); + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); return mypageConverter.userToMypageGetProfileResponse(user); }