From c1fdc83c40fdeb883eb15a679e1a630deea29a53 Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Sat, 22 Feb 2025 13:06:23 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=20=EC=84=A4=EC=A0=95,=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ouch/web/controller/UserController.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/com/hy/ouch/web/controller/UserController.java diff --git a/src/main/java/com/hy/ouch/web/controller/UserController.java b/src/main/java/com/hy/ouch/web/controller/UserController.java new file mode 100644 index 0000000..314e189 --- /dev/null +++ b/src/main/java/com/hy/ouch/web/controller/UserController.java @@ -0,0 +1,36 @@ +package com.hy.ouch.web.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.hy.ouch.apiPayload.ApiResponse; +import com.hy.ouch.security.userDetail.OuchUserDetails; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/users") +@RequiredArgsConstructor +public class UserController { + + @PatchMapping("/languages") + public ResponseEntity> updateUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails, @PathVariable("languageId") Long id, + @RequestBody String language) { + Long userId = userDetails.getDatabaseId(); + userService.updateUserLanguage(userId, language); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } + + @GetMapping("/languages") + public ResponseEntity> getUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails) { + Long userId = userDetails.getDatabaseId(); + userService.updateLanguage(userId); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } +} From 43a293d0feabb49a1beb2f34c2de593b14401b66 Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 10:33:04 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[FEAT]=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EB=82=B4=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EC=96=B8=EC=96=B4=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Language/LanguageController.java | 28 +++++++++ .../ouch/controller/user/UserController.java | 19 +++++++ .../onebridge/ouch/dto/MessageResponse.java | 11 ---- .../ouch/dto/MessageResponseDetailed.java | 17 ------ .../dto/language/request/AllLangsRequest.java | 13 ----- ...onse.java => GetAllLanguagesResponse.java} | 26 ++++----- .../response/GetUserLanguageResponse.java} | 10 +--- .../ouch/service/LanguageService.java | 57 ------------------- .../service/language/LanguageService.java | 26 +++++++++ .../web/controller/LanguageController.java | 55 ------------------ .../ouch/web/controller/UserController.java | 36 ------------ 11 files changed, 88 insertions(+), 210 deletions(-) create mode 100644 src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java delete mode 100644 src/main/java/com/onebridge/ouch/dto/MessageResponse.java delete mode 100644 src/main/java/com/onebridge/ouch/dto/MessageResponseDetailed.java delete mode 100644 src/main/java/com/onebridge/ouch/dto/language/request/AllLangsRequest.java rename src/main/java/com/onebridge/ouch/dto/language/response/{UserLangResponse.java => GetAllLanguagesResponse.java} (51%) rename src/main/java/com/onebridge/ouch/{web/dto/LanguageDto.java => dto/user/response/GetUserLanguageResponse.java} (64%) delete mode 100644 src/main/java/com/onebridge/ouch/service/LanguageService.java create mode 100644 src/main/java/com/onebridge/ouch/service/language/LanguageService.java delete mode 100644 src/main/java/com/onebridge/ouch/web/controller/LanguageController.java delete mode 100644 src/main/java/com/onebridge/ouch/web/controller/UserController.java diff --git a/src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java b/src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java new file mode 100644 index 0000000..8b312e4 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java @@ -0,0 +1,28 @@ +package com.onebridge.ouch.controller.Language; + +import java.util.List; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.onebridge.ouch.apiPayload.ApiResponse; +import com.onebridge.ouch.service.language.LanguageService; +import com.onebridge.ouch.dto.language.response.GetAllLanguagesResponse; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/languages") +@RequiredArgsConstructor +public class LanguageController { + + private final LanguageService languageService; + + @GetMapping // 전체 언어 목록 조회 + public ResponseEntity>> getAllLanguages() { + List languages = languageService.getAllLanguages(); + return ResponseEntity.ok(ApiResponse.success(languages)); + } +} diff --git a/src/main/java/com/onebridge/ouch/controller/user/UserController.java b/src/main/java/com/onebridge/ouch/controller/user/UserController.java index 52f89e7..8ddf096 100644 --- a/src/main/java/com/onebridge/ouch/controller/user/UserController.java +++ b/src/main/java/com/onebridge/ouch/controller/user/UserController.java @@ -1,8 +1,12 @@ package com.onebridge.ouch.controller.user; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -35,6 +39,21 @@ public ResponseEntity> deactivateUser( userService.deactivateUser(userId); return ResponseEntity.ok(ApiResponse.successWithNoData()); } + + @PatchMapping("/languages") + public ResponseEntity> updateUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails, @PathVariable("languageId") Long id, + @RequestBody String language) { + Long userId = userDetails.getDatabaseId(); + userService.updateUserLanguage(userId, language); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } + + @GetMapping("/languages") + public ResponseEntity> getUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails) { + Long userId = userDetails.getDatabaseId(); + userService.updateLanguage(userId); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } } diff --git a/src/main/java/com/onebridge/ouch/dto/MessageResponse.java b/src/main/java/com/onebridge/ouch/dto/MessageResponse.java deleted file mode 100644 index 8454e8a..0000000 --- a/src/main/java/com/onebridge/ouch/dto/MessageResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.onebridge.ouch.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor -@Getter -public class MessageResponse { - - private String message; -} diff --git a/src/main/java/com/onebridge/ouch/dto/MessageResponseDetailed.java b/src/main/java/com/onebridge/ouch/dto/MessageResponseDetailed.java deleted file mode 100644 index 9581742..0000000 --- a/src/main/java/com/onebridge/ouch/dto/MessageResponseDetailed.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.onebridge.ouch.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor -@Getter -public class MessageResponseDetailed { - - private boolean success; - - private String code; - - private String message; - - private T data; -} diff --git a/src/main/java/com/onebridge/ouch/dto/language/request/AllLangsRequest.java b/src/main/java/com/onebridge/ouch/dto/language/request/AllLangsRequest.java deleted file mode 100644 index 65d652f..0000000 --- a/src/main/java/com/onebridge/ouch/dto/language/request/AllLangsRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.onebridge.ouch.dto.language.request; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public class AllLangsRequest { - - private Long id; - - private String name; -} diff --git a/src/main/java/com/onebridge/ouch/dto/language/response/UserLangResponse.java b/src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java similarity index 51% rename from src/main/java/com/onebridge/ouch/dto/language/response/UserLangResponse.java rename to src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java index 17a3db0..8d966e8 100644 --- a/src/main/java/com/onebridge/ouch/dto/language/response/UserLangResponse.java +++ b/src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java @@ -1,13 +1,13 @@ -package com.onebridge.ouch.dto.language.response; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public class UserLangResponse { - - private Long language_id; - - private String language_name; -} +package com.onebridge.ouch.dto.language.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GetAllLanguagesResponse { + + private String name; + + private String code; // 언어 코드 (e.g., 'en', 'ko') +} diff --git a/src/main/java/com/onebridge/ouch/web/dto/LanguageDto.java b/src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java similarity index 64% rename from src/main/java/com/onebridge/ouch/web/dto/LanguageDto.java rename to src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java index 36e59f0..9c6536c 100644 --- a/src/main/java/com/onebridge/ouch/web/dto/LanguageDto.java +++ b/src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java @@ -1,15 +1,9 @@ -package com.onebridge.ouch.web.dto; +package com.onebridge.ouch.dto.user.response; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -@Data -@NoArgsConstructor -@AllArgsConstructor -public class LanguageDto { +public class GetUserLanguageResponse { @NotBlank(message = "언어 이름은 필수입니다.") private String name; diff --git a/src/main/java/com/onebridge/ouch/service/LanguageService.java b/src/main/java/com/onebridge/ouch/service/LanguageService.java deleted file mode 100644 index 8ddd9d5..0000000 --- a/src/main/java/com/onebridge/ouch/service/LanguageService.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.onebridge.ouch.service; - -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Service; - -import com.onebridge.ouch.apiPayload.code.error.CommonErrorCode; -import com.onebridge.ouch.apiPayload.exception.OuchException; -import com.onebridge.ouch.domain.Language; -import com.onebridge.ouch.repository.language.LanguageRepository; -import com.onebridge.ouch.web.dto.LanguageDto; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class LanguageService { - - private final LanguageRepository languageRepository; - - /* - public Long addLanguage(LanguageDto languageDto) { - Language language = Language.builder() - .name(languageDto.getName()) - .code(languageDto.getCode()) - .build(); - Language savedLanguage = languageRepository.save(language); - return savedLanguage.getId(); - } - - public void updateLanguage(Long id, LanguageDto languageDto) { - Language existingLanguage = languageRepository.findById(id) - .orElseThrow(() -> new OuchException(CommonErrorCode.RESOURCE_NOT_FOUND)); - - existingLanguage.updateLanguageFields( - languageDto.getName(), - languageDto.getCode() - ); - languageRepository.save(existingLanguage); - } - - public void deleteLanguage(Long id) { - if (!languageRepository.existsById(id)) { - throw new OuchException(CommonErrorCode.RESOURCE_NOT_FOUND); - } - languageRepository.deleteById(id); - } - */ - - public List getAllLanguages() { - List languages = languageRepository.findAll(); - return languages.stream() - .map(language -> new LanguageDto(language.getName(), language.getCode())) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/onebridge/ouch/service/language/LanguageService.java b/src/main/java/com/onebridge/ouch/service/language/LanguageService.java new file mode 100644 index 0000000..1cc3813 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/service/language/LanguageService.java @@ -0,0 +1,26 @@ +package com.onebridge.ouch.service.language; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Service; + +import com.onebridge.ouch.domain.Language; +import com.onebridge.ouch.repository.language.LanguageRepository; +import com.onebridge.ouch.dto.language.response.GetAllLanguagesResponse; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class LanguageService { + + private final LanguageRepository languageRepository; + + public List getAllLanguages() { + List languages = languageRepository.findAll(); + return languages.stream() + .map(language -> new GetAllLanguagesResponse(language.getName(), language.getCode())) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/onebridge/ouch/web/controller/LanguageController.java b/src/main/java/com/onebridge/ouch/web/controller/LanguageController.java deleted file mode 100644 index aef6706..0000000 --- a/src/main/java/com/onebridge/ouch/web/controller/LanguageController.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.onebridge.ouch.web.controller; - -import java.util.List; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestBody; - -import com.onebridge.ouch.apiPayload.ApiResponse; -import com.onebridge.ouch.service.LanguageService; -import com.onebridge.ouch.web.dto.LanguageDto; - -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping("/api/languages") -@RequiredArgsConstructor -public class LanguageController { - - private final LanguageService languageService; - - /* - @PostMapping - public ResponseEntity> addLanguage(@Valid @RequestBody LanguageDto languageDto) { - Long languageId = languageService.addLanguage(languageDto); - return ResponseEntity.ok(ApiResponse.success(languageId)); - } - - @PatchMapping("/{languageId}") - public ResponseEntity> updateLanguage(@PathVariable("languageId") Long id, - @RequestBody LanguageDto languageDto) { - languageService.updateLanguage(id, languageDto); - return ResponseEntity.ok(ApiResponse.successWithNoData()); - } - - @DeleteMapping("/{languageId}") - public ResponseEntity> deleteLanguage(@PathVariable("languageId") Long id) { - languageService.deleteLanguage(id); - return ResponseEntity.ok(ApiResponse.successWithNoData()); - } - */ - - @GetMapping // 전체 언어 목록 조회 - public ResponseEntity>> getAllLanguages() { - List languages = languageService.getAllLanguages(); - return ResponseEntity.ok(ApiResponse.success(languages)); - } -} diff --git a/src/main/java/com/onebridge/ouch/web/controller/UserController.java b/src/main/java/com/onebridge/ouch/web/controller/UserController.java deleted file mode 100644 index 314e189..0000000 --- a/src/main/java/com/onebridge/ouch/web/controller/UserController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hy.ouch.web.controller; - -import org.springframework.http.ResponseEntity; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.hy.ouch.apiPayload.ApiResponse; -import com.hy.ouch.security.userDetail.OuchUserDetails; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping("/users") -@RequiredArgsConstructor -public class UserController { - - @PatchMapping("/languages") - public ResponseEntity> updateUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails, @PathVariable("languageId") Long id, - @RequestBody String language) { - Long userId = userDetails.getDatabaseId(); - userService.updateUserLanguage(userId, language); - return ResponseEntity.ok(ApiResponse.successWithNoData()); - } - - @GetMapping("/languages") - public ResponseEntity> getUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails) { - Long userId = userDetails.getDatabaseId(); - userService.updateLanguage(userId); - return ResponseEntity.ok(ApiResponse.successWithNoData()); - } -} From b36dfd71611f0ead339acd885274bb0bc2dcb50b Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 10:56:43 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[FEAT]=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EB=82=B4=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EA=B5=AD=EA=B0=80=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageController.java | 8 +++-- .../controller/nation/NationController.java | 32 +++++++++++++++++++ .../response/GetAllNationsResponse.java | 13 ++++++++ .../ouch/service/nation/NationService.java | 26 +++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) rename src/main/java/com/onebridge/ouch/controller/{Language => language}/LanguageController.java (68%) create mode 100644 src/main/java/com/onebridge/ouch/controller/nation/NationController.java create mode 100644 src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java create mode 100644 src/main/java/com/onebridge/ouch/service/nation/NationService.java diff --git a/src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java b/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java similarity index 68% rename from src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java rename to src/main/java/com/onebridge/ouch/controller/language/LanguageController.java index 8b312e4..3b6a6fd 100644 --- a/src/main/java/com/onebridge/ouch/controller/Language/LanguageController.java +++ b/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java @@ -1,4 +1,4 @@ -package com.onebridge.ouch.controller.Language; +package com.onebridge.ouch.controller.language; import java.util.List; @@ -11,8 +11,11 @@ import com.onebridge.ouch.service.language.LanguageService; import com.onebridge.ouch.dto.language.response.GetAllLanguagesResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +@Tag(name = "언어 관련 API", description = "언어 관련 API 입니다.") @RestController @RequestMapping("/languages") @RequiredArgsConstructor @@ -20,7 +23,8 @@ public class LanguageController { private final LanguageService languageService; - @GetMapping // 전체 언어 목록 조회 + @Operation(summary = "언어 목록 조회 API", description = "데이터베이스 내 모든 언어 목록을 조회합니다.") + @GetMapping public ResponseEntity>> getAllLanguages() { List languages = languageService.getAllLanguages(); return ResponseEntity.ok(ApiResponse.success(languages)); diff --git a/src/main/java/com/onebridge/ouch/controller/nation/NationController.java b/src/main/java/com/onebridge/ouch/controller/nation/NationController.java new file mode 100644 index 0000000..9cb927e --- /dev/null +++ b/src/main/java/com/onebridge/ouch/controller/nation/NationController.java @@ -0,0 +1,32 @@ +package com.onebridge.ouch.controller.nation; + +import java.util.List; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +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.nation.response.GetAllNationsResponse; +import com.onebridge.ouch.service.nation.NationService; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + +@Tag(name = "국적 관련 API", description = "국적 관련 API 입니다.") +@RestController +@RequestMapping("/nations") +@RequiredArgsConstructor +public class NationController { + + private final NationService nationService; + + @Operation(summary = "국가 목록 조회 API", description = "데이터베이스 내 모든 국가 목록을 조회합니다.") + @GetMapping + public ResponseEntity>> getAllNations() { + List nations = nationService.getAllNations(); + return ResponseEntity.ok(ApiResponse.success(nations)); + } +} diff --git a/src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java b/src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java new file mode 100644 index 0000000..24817e0 --- /dev/null +++ b/src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java @@ -0,0 +1,13 @@ +package com.onebridge.ouch.dto.nation.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GetAllNationsResponse { + + private String name; + + private String code; +} diff --git a/src/main/java/com/onebridge/ouch/service/nation/NationService.java b/src/main/java/com/onebridge/ouch/service/nation/NationService.java new file mode 100644 index 0000000..273c30e --- /dev/null +++ b/src/main/java/com/onebridge/ouch/service/nation/NationService.java @@ -0,0 +1,26 @@ +package com.onebridge.ouch.service.nation; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Service; + +import com.onebridge.ouch.domain.Nation; +import com.onebridge.ouch.dto.nation.response.GetAllNationsResponse; +import com.onebridge.ouch.repository.nation.NationRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class NationService { + + private final NationRepository nationRepository; + + public List getAllNations() { + List nations = nationRepository.findAll(); + return nations.stream() + .map(nation -> new GetAllNationsResponse(nation.getName(), nation.getCode())) + .collect(Collectors.toList()); + } +} From 3b06f79daed7fefe10eb8a8f6b22cde6a6292476 Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 12:02:49 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=20=EC=84=A4=EC=A0=95=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EC=A1=B0=ED=9D=AC=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../language/LanguageController.java | 6 +- .../controller/nation/NationController.java | 6 +- .../ouch/controller/user/UserController.java | 40 +++++-------- .../java/com/onebridge/ouch/domain/User.java | 4 ++ ...Response.java => GetLanguageResponse.java} | 2 +- ...nsResponse.java => GetNationResponse.java} | 2 +- .../language/LanguageRepository.java | 3 + .../ouch/repository/user/UserRepository.java | 4 ++ .../service/language/LanguageService.java | 8 ++- .../ouch/service/nation/NationService.java | 8 ++- .../ouch/service/user/UserService.java | 56 ++++++++----------- 11 files changed, 65 insertions(+), 74 deletions(-) rename src/main/java/com/onebridge/ouch/dto/language/response/{GetAllLanguagesResponse.java => GetLanguageResponse.java} (80%) rename src/main/java/com/onebridge/ouch/dto/nation/response/{GetAllNationsResponse.java => GetNationResponse.java} (78%) diff --git a/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java b/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java index 3b6a6fd..45a0ac5 100644 --- a/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java +++ b/src/main/java/com/onebridge/ouch/controller/language/LanguageController.java @@ -9,7 +9,7 @@ import com.onebridge.ouch.apiPayload.ApiResponse; import com.onebridge.ouch.service.language.LanguageService; -import com.onebridge.ouch.dto.language.response.GetAllLanguagesResponse; +import com.onebridge.ouch.dto.language.response.GetLanguageResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -25,8 +25,8 @@ public class LanguageController { @Operation(summary = "언어 목록 조회 API", description = "데이터베이스 내 모든 언어 목록을 조회합니다.") @GetMapping - public ResponseEntity>> getAllLanguages() { - List languages = languageService.getAllLanguages(); + public ResponseEntity>> getAllLanguages() { + List languages = languageService.getAllLanguages(); return ResponseEntity.ok(ApiResponse.success(languages)); } } diff --git a/src/main/java/com/onebridge/ouch/controller/nation/NationController.java b/src/main/java/com/onebridge/ouch/controller/nation/NationController.java index 9cb927e..7f74789 100644 --- a/src/main/java/com/onebridge/ouch/controller/nation/NationController.java +++ b/src/main/java/com/onebridge/ouch/controller/nation/NationController.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.RestController; import com.onebridge.ouch.apiPayload.ApiResponse; -import com.onebridge.ouch.dto.nation.response.GetAllNationsResponse; +import com.onebridge.ouch.dto.nation.response.GetNationResponse; import com.onebridge.ouch.service.nation.NationService; import io.swagger.v3.oas.annotations.Operation; @@ -25,8 +25,8 @@ public class NationController { @Operation(summary = "국가 목록 조회 API", description = "데이터베이스 내 모든 국가 목록을 조회합니다.") @GetMapping - public ResponseEntity>> getAllNations() { - List nations = nationService.getAllNations(); + public ResponseEntity>> getAllNations() { + List nations = nationService.getAllNations(); return ResponseEntity.ok(ApiResponse.success(nations)); } } diff --git a/src/main/java/com/onebridge/ouch/controller/user/UserController.java b/src/main/java/com/onebridge/ouch/controller/user/UserController.java index 8ddf096..daa46ac 100644 --- a/src/main/java/com/onebridge/ouch/controller/user/UserController.java +++ b/src/main/java/com/onebridge/ouch/controller/user/UserController.java @@ -11,12 +11,16 @@ import org.springframework.web.bind.annotation.RestController; import com.onebridge.ouch.apiPayload.ApiResponse; +import com.onebridge.ouch.dto.language.response.GetLanguageResponse; import com.onebridge.ouch.dto.user.response.UserInfoResponse; import com.onebridge.ouch.security.authorization.UserId; import com.onebridge.ouch.service.user.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +@Tag(name = "사용자 관련 API", description = "사용자 관련 API 입니다.") @RestController @RequestMapping("/users") @RequiredArgsConstructor @@ -40,36 +44,18 @@ public ResponseEntity> deactivateUser( return ResponseEntity.ok(ApiResponse.successWithNoData()); } - @PatchMapping("/languages") - public ResponseEntity> updateUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails, @PathVariable("languageId") Long id, - @RequestBody String language) { - Long userId = userDetails.getDatabaseId(); - userService.updateUserLanguage(userId, language); + @Operation(summary = "유저 언어 설정 변경 API", description = "언어코드를 전달받아 유저의 언어 설정을 변경합니다.") + @PatchMapping("/languages/{languageCode}") + public ResponseEntity> updateUserLanguage(@UserId Long userId, @PathVariable("languageCode") String languageCode) { + userService.updateUserLanguage(userId, languageCode); return ResponseEntity.ok(ApiResponse.successWithNoData()); } + @Operation(summary = "유저 설정 언어 조회 API", description = "로그인 된 유저의 설정된 언어를 조회합니다.") @GetMapping("/languages") - public ResponseEntity> getUserLanguage(@AuthenticationPrincipal OuchUserDetails userDetails) { - Long userId = userDetails.getDatabaseId(); - userService.updateLanguage(userId); - return ResponseEntity.ok(ApiResponse.successWithNoData()); + public ResponseEntity> getUserLanguage(@UserId Long userId) { + userService.getUserLanguage(userId); + GetLanguageResponse languageResponse = userService.getUserLanguage(userId); + return ResponseEntity.ok(ApiResponse.success(languageResponse)); } } - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/com/onebridge/ouch/domain/User.java b/src/main/java/com/onebridge/ouch/domain/User.java index 9412ab9..44eb068 100644 --- a/src/main/java/com/onebridge/ouch/domain/User.java +++ b/src/main/java/com/onebridge/ouch/domain/User.java @@ -103,4 +103,8 @@ public class User extends BaseEntity { public OuchAuthority getAuthority() { return OuchAuthority.INDIVIDUAL; } + + public void updateLanguage(Language language) { + this.language = language; + } } diff --git a/src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java b/src/main/java/com/onebridge/ouch/dto/language/response/GetLanguageResponse.java similarity index 80% rename from src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java rename to src/main/java/com/onebridge/ouch/dto/language/response/GetLanguageResponse.java index 8d966e8..6713a72 100644 --- a/src/main/java/com/onebridge/ouch/dto/language/response/GetAllLanguagesResponse.java +++ b/src/main/java/com/onebridge/ouch/dto/language/response/GetLanguageResponse.java @@ -5,7 +5,7 @@ @Getter @AllArgsConstructor -public class GetAllLanguagesResponse { +public class GetLanguageResponse { private String name; diff --git a/src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java b/src/main/java/com/onebridge/ouch/dto/nation/response/GetNationResponse.java similarity index 78% rename from src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java rename to src/main/java/com/onebridge/ouch/dto/nation/response/GetNationResponse.java index 24817e0..a756fd8 100644 --- a/src/main/java/com/onebridge/ouch/dto/nation/response/GetAllNationsResponse.java +++ b/src/main/java/com/onebridge/ouch/dto/nation/response/GetNationResponse.java @@ -5,7 +5,7 @@ @Getter @AllArgsConstructor -public class GetAllNationsResponse { +public class GetNationResponse { private String name; diff --git a/src/main/java/com/onebridge/ouch/repository/language/LanguageRepository.java b/src/main/java/com/onebridge/ouch/repository/language/LanguageRepository.java index cb5a874..4c924cc 100644 --- a/src/main/java/com/onebridge/ouch/repository/language/LanguageRepository.java +++ b/src/main/java/com/onebridge/ouch/repository/language/LanguageRepository.java @@ -1,5 +1,7 @@ package com.onebridge.ouch.repository.language; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -7,4 +9,5 @@ @Repository public interface LanguageRepository extends JpaRepository { + Optional findByCode(String code); } diff --git a/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java b/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java index 8ac1838..6d4045c 100644 --- a/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java +++ b/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java @@ -2,6 +2,7 @@ import java.util.Optional; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -12,4 +13,7 @@ public interface UserRepository extends JpaRepository { Optional findByLoginId(String loginId); Optional findByNickname(String nickName); + + @EntityGraph(attributePaths = {"language"}) // language 필드를 즉시 조인 (fetch join 쿼리 최적화) + Optional findWithLanguageById(Long id); } diff --git a/src/main/java/com/onebridge/ouch/service/language/LanguageService.java b/src/main/java/com/onebridge/ouch/service/language/LanguageService.java index 1cc3813..6984f3d 100644 --- a/src/main/java/com/onebridge/ouch/service/language/LanguageService.java +++ b/src/main/java/com/onebridge/ouch/service/language/LanguageService.java @@ -4,10 +4,11 @@ import java.util.stream.Collectors; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.onebridge.ouch.domain.Language; import com.onebridge.ouch.repository.language.LanguageRepository; -import com.onebridge.ouch.dto.language.response.GetAllLanguagesResponse; +import com.onebridge.ouch.dto.language.response.GetLanguageResponse; import lombok.RequiredArgsConstructor; @@ -17,10 +18,11 @@ public class LanguageService { private final LanguageRepository languageRepository; - public List getAllLanguages() { + @Transactional + public List getAllLanguages() { List languages = languageRepository.findAll(); return languages.stream() - .map(language -> new GetAllLanguagesResponse(language.getName(), language.getCode())) + .map(language -> new GetLanguageResponse(language.getName(), language.getCode())) .collect(Collectors.toList()); } } diff --git a/src/main/java/com/onebridge/ouch/service/nation/NationService.java b/src/main/java/com/onebridge/ouch/service/nation/NationService.java index 273c30e..47e1d93 100644 --- a/src/main/java/com/onebridge/ouch/service/nation/NationService.java +++ b/src/main/java/com/onebridge/ouch/service/nation/NationService.java @@ -4,9 +4,10 @@ import java.util.stream.Collectors; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.onebridge.ouch.domain.Nation; -import com.onebridge.ouch.dto.nation.response.GetAllNationsResponse; +import com.onebridge.ouch.dto.nation.response.GetNationResponse; import com.onebridge.ouch.repository.nation.NationRepository; import lombok.RequiredArgsConstructor; @@ -17,10 +18,11 @@ public class NationService { private final NationRepository nationRepository; - public List getAllNations() { + @Transactional + public List getAllNations() { List nations = nationRepository.findAll(); return nations.stream() - .map(nation -> new GetAllNationsResponse(nation.getName(), nation.getCode())) + .map(nation -> new GetNationResponse(nation.getName(), nation.getCode())) .collect(Collectors.toList()); } } diff --git a/src/main/java/com/onebridge/ouch/service/user/UserService.java b/src/main/java/com/onebridge/ouch/service/user/UserService.java index fa7ad70..816b823 100644 --- a/src/main/java/com/onebridge/ouch/service/user/UserService.java +++ b/src/main/java/com/onebridge/ouch/service/user/UserService.java @@ -6,21 +6,26 @@ import com.onebridge.ouch.apiPayload.code.error.CommonErrorCode; import com.onebridge.ouch.apiPayload.exception.OuchException; import com.onebridge.ouch.converter.UserConverter; +import com.onebridge.ouch.domain.Language; import com.onebridge.ouch.domain.User; import com.onebridge.ouch.domain.enums.UserStatus; +import com.onebridge.ouch.dto.language.response.GetLanguageResponse; import com.onebridge.ouch.dto.user.response.UserInfoResponse; +import com.onebridge.ouch.repository.language.LanguageRepository; import com.onebridge.ouch.repository.nation.NationRepository; import com.onebridge.ouch.repository.user.UserRepository; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; @Service -@AllArgsConstructor +@RequiredArgsConstructor public class UserService { private final UserRepository userRepository; - private final NationRepository nationRepository; private final UserConverter userConverter; + private final NationRepository nationRepository; + private final LanguageRepository languageRepository; //유저 조회(테스트용) @Transactional(readOnly = true) @@ -42,42 +47,27 @@ public void deactivateUser(Long userId) { userRepository.save(deactivatedUser); } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @Transactional + public void updateUserLanguage(Long userId, String languageCode) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); + Language language = languageRepository.findByCode(languageCode) + .orElseThrow(() -> new OuchException(CommonErrorCode.LANGUAGE_NOT_FOUND)); + user.updateLanguage(language); + } + @Transactional + public GetLanguageResponse getUserLanguage(Long userId) { + User user = userRepository.findWithLanguageById(userId) + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); + Language language = user.getLanguage(); + return new GetLanguageResponse(language.getName(), language.getCode()); + } +} From a291279674d298f11c087c2ae3cf1ab44cb170fe Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 12:12:59 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EA=B5=AD?= =?UTF-8?q?=EC=A0=81=20=EC=84=A4=EC=A0=95=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ouch/controller/user/UserController.java | 16 ++++++++++++++ .../java/com/onebridge/ouch/domain/User.java | 4 ++++ .../repository/nation/NationRepository.java | 4 ++++ .../ouch/repository/user/UserRepository.java | 3 +++ .../ouch/service/user/UserService.java | 21 +++++++++++++++++++ 5 files changed, 48 insertions(+) diff --git a/src/main/java/com/onebridge/ouch/controller/user/UserController.java b/src/main/java/com/onebridge/ouch/controller/user/UserController.java index daa46ac..682a0d5 100644 --- a/src/main/java/com/onebridge/ouch/controller/user/UserController.java +++ b/src/main/java/com/onebridge/ouch/controller/user/UserController.java @@ -12,6 +12,7 @@ import com.onebridge.ouch.apiPayload.ApiResponse; import com.onebridge.ouch.dto.language.response.GetLanguageResponse; +import com.onebridge.ouch.dto.nation.response.GetNationResponse; import com.onebridge.ouch.dto.user.response.UserInfoResponse; import com.onebridge.ouch.security.authorization.UserId; import com.onebridge.ouch.service.user.UserService; @@ -58,4 +59,19 @@ public ResponseEntity> getUserLanguage(@UserId GetLanguageResponse languageResponse = userService.getUserLanguage(userId); return ResponseEntity.ok(ApiResponse.success(languageResponse)); } + + @Operation(summary = "유저 국적 설정 변경 API", description = "국가코드를 전달받아 유저의 국적 설정을 변경합니다.") + @PatchMapping("/nations/{nationCode}") + public ResponseEntity> updateUserNation(@UserId Long userId, @PathVariable("nationCode") String nationCode) { + userService.updateUserNation(userId, nationCode); + return ResponseEntity.ok(ApiResponse.successWithNoData()); + } + + @Operation(summary = "유저 설정 국적 조회 API", description = "로그인 된 유저의 설정된 국적를 조회합니다.") + @GetMapping("/nations") + public ResponseEntity> getUserNation(@UserId Long userId) { + userService.getUserNation(userId); + GetNationResponse nationResponse = userService.getUserNation(userId); + return ResponseEntity.ok(ApiResponse.success(nationResponse)); + } } diff --git a/src/main/java/com/onebridge/ouch/domain/User.java b/src/main/java/com/onebridge/ouch/domain/User.java index 44eb068..ba7cfa7 100644 --- a/src/main/java/com/onebridge/ouch/domain/User.java +++ b/src/main/java/com/onebridge/ouch/domain/User.java @@ -107,4 +107,8 @@ public OuchAuthority getAuthority() { public void updateLanguage(Language language) { this.language = language; } + + public void updateNation(Nation nation) { + this.nation = nation; + } } diff --git a/src/main/java/com/onebridge/ouch/repository/nation/NationRepository.java b/src/main/java/com/onebridge/ouch/repository/nation/NationRepository.java index c31b172..6ef0720 100644 --- a/src/main/java/com/onebridge/ouch/repository/nation/NationRepository.java +++ b/src/main/java/com/onebridge/ouch/repository/nation/NationRepository.java @@ -1,8 +1,12 @@ package com.onebridge.ouch.repository.nation; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; +import com.onebridge.ouch.domain.Language; import com.onebridge.ouch.domain.Nation; public interface NationRepository extends JpaRepository { + Optional findByCode(String code); } diff --git a/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java b/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java index 6d4045c..4bf874a 100644 --- a/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java +++ b/src/main/java/com/onebridge/ouch/repository/user/UserRepository.java @@ -16,4 +16,7 @@ public interface UserRepository extends JpaRepository { @EntityGraph(attributePaths = {"language"}) // language 필드를 즉시 조인 (fetch join 쿼리 최적화) Optional findWithLanguageById(Long id); + + @EntityGraph(attributePaths = {"nation"}) // language 필드를 즉시 조인 (fetch join 쿼리 최적화) + Optional findWithNationById(Long id); } diff --git a/src/main/java/com/onebridge/ouch/service/user/UserService.java b/src/main/java/com/onebridge/ouch/service/user/UserService.java index 816b823..a2de4f5 100644 --- a/src/main/java/com/onebridge/ouch/service/user/UserService.java +++ b/src/main/java/com/onebridge/ouch/service/user/UserService.java @@ -7,9 +7,11 @@ import com.onebridge.ouch.apiPayload.exception.OuchException; import com.onebridge.ouch.converter.UserConverter; import com.onebridge.ouch.domain.Language; +import com.onebridge.ouch.domain.Nation; import com.onebridge.ouch.domain.User; import com.onebridge.ouch.domain.enums.UserStatus; import com.onebridge.ouch.dto.language.response.GetLanguageResponse; +import com.onebridge.ouch.dto.nation.response.GetNationResponse; import com.onebridge.ouch.dto.user.response.UserInfoResponse; import com.onebridge.ouch.repository.language.LanguageRepository; import com.onebridge.ouch.repository.nation.NationRepository; @@ -69,5 +71,24 @@ public GetLanguageResponse getUserLanguage(Long userId) { return new GetLanguageResponse(language.getName(), language.getCode()); } + @Transactional + public void updateUserNation(Long userId, String nationCode) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); + + Nation nation = nationRepository.findByCode(nationCode) + .orElseThrow(() -> new OuchException(CommonErrorCode.LANGUAGE_NOT_FOUND)); + + user.updateNation(nation); + } + + @Transactional + public GetNationResponse getUserNation(Long userId) { + User user = userRepository.findWithNationById(userId) + .orElseThrow(() -> new OuchException(CommonErrorCode.MEMBER_NOT_FOUND)); + + Nation nation = user.getNation(); + return new GetNationResponse(nation.getName(), nation.getCode()); + } } From 26a5ab9a1ccc51ca9fec8340d76380ccb454ca9a Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 12:16:57 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[REFACT]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=8B=9C=20=EA=B5=AD=EC=A0=81,=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=20ID=EA=B0=80=20=EC=95=84=EB=8B=8C=20Code=EB=A1=9C=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85=ED=95=98=EB=8F=84=EB=A1=9D=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 --- .../onebridge/ouch/security/dto/request/SignUpRequest.java | 4 ++-- .../com/onebridge/ouch/security/service/SignUpService.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java b/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java index d42d12b..388828f 100644 --- a/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java +++ b/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java @@ -25,8 +25,8 @@ public class SignUpRequest { private String email; private String address; private UserStatus status; - private Long languageId; - private Long nationId; + private String languageCode; + private String nationCode; public User toEntity(String encodedPassword, Language language, Nation nation) { return User.builder() diff --git a/src/main/java/com/onebridge/ouch/security/service/SignUpService.java b/src/main/java/com/onebridge/ouch/security/service/SignUpService.java index 53e85b8..7a8b07d 100644 --- a/src/main/java/com/onebridge/ouch/security/service/SignUpService.java +++ b/src/main/java/com/onebridge/ouch/security/service/SignUpService.java @@ -32,10 +32,10 @@ public void signUpUser(SignUpRequest signUpRequest) { checkDuplicatedNickname(signUpRequest.getNickname()); // ID를 통해 실제 Entity 조회 - Language language = languageRepository.findById(signUpRequest.getLanguageId()) + Language language = languageRepository.findByCode(signUpRequest.getLanguageCode()) .orElseThrow(() -> new OuchException(CommonErrorCode.LANGUAGE_NOT_FOUND)); - Nation nation = nationRepository.findById(signUpRequest.getNationId()) + Nation nation = nationRepository.findByCode(signUpRequest.getNationCode()) .orElseThrow(() -> new OuchException(CommonErrorCode.NATION_NOT_FOUND)); User user = signUpRequest.toEntity(passwordEncoder.encode(signUpRequest.getPassword()), language, nation); From 71d5e7b82c0495fc5349e57b4e7c891aa7dbb602 Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 12:46:09 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[CHORE]=20=EA=B5=AD=EA=B0=80,=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=20=ED=95=84=EB=93=9C=20=EC=9C=A0=EB=8B=88=ED=81=AC=20?= =?UTF-8?q?=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=EC=8A=A4=EC=9B=A8?= =?UTF-8?q?=EA=B1=B0=20=EA=B8=B0=EB=B3=B8=EA=B0=92(=EA=B5=AD=EC=A0=81,=20?= =?UTF-8?q?=EC=96=B8=EC=96=B4)=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/onebridge/ouch/domain/Language.java | 4 ++-- src/main/java/com/onebridge/ouch/domain/Nation.java | 4 ++-- .../onebridge/ouch/security/dto/request/SignUpRequest.java | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/onebridge/ouch/domain/Language.java b/src/main/java/com/onebridge/ouch/domain/Language.java index f7e8960..5f863e2 100644 --- a/src/main/java/com/onebridge/ouch/domain/Language.java +++ b/src/main/java/com/onebridge/ouch/domain/Language.java @@ -17,10 +17,10 @@ public class Language extends BaseEntity { private Long id; //국제 언어 코드 - @Column(nullable = false, length = 4) + @Column(unique = true, nullable = false, length = 4) private String code; //언어 이름 - ex) 한국어, 영어 - @Column(nullable = false, length = 30) + @Column(unique = true, nullable = false, length = 30) private String name; } diff --git a/src/main/java/com/onebridge/ouch/domain/Nation.java b/src/main/java/com/onebridge/ouch/domain/Nation.java index a353900..f95bd7a 100644 --- a/src/main/java/com/onebridge/ouch/domain/Nation.java +++ b/src/main/java/com/onebridge/ouch/domain/Nation.java @@ -25,9 +25,9 @@ public class Nation extends BaseEntity { private Long id; // 국가 코드 - @Column(nullable = false, length = 4) + @Column(unique = true, nullable = false, length = 4) private String code; - @Column(nullable = false, length = 30) + @Column(unique = true, nullable = false, length = 30) private String name; } diff --git a/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java b/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java index 388828f..1749b77 100644 --- a/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java +++ b/src/main/java/com/onebridge/ouch/security/dto/request/SignUpRequest.java @@ -8,6 +8,7 @@ import com.onebridge.ouch.domain.enums.Gender; import com.onebridge.ouch.domain.enums.UserStatus; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; @@ -25,7 +26,9 @@ public class SignUpRequest { private String email; private String address; private UserStatus status; + @Schema(example = "kr") private String languageCode; + @Schema(example = "KO") private String nationCode; public User toEntity(String encodedPassword, Language language, Nation nation) { From c73b9c04f25acb5ddd6efbea57e5cda8c8f0e65c Mon Sep 17 00:00:00 2001 From: 99hyuk Date: Wed, 30 Apr 2025 12:51:43 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[CHORE]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=96=B8=EC=96=B4=20dto=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/user/response/GetUserLanguageResponse.java | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java diff --git a/src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java b/src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java deleted file mode 100644 index 9c6536c..0000000 --- a/src/main/java/com/onebridge/ouch/dto/user/response/GetUserLanguageResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.onebridge.ouch.dto.user.response; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Size; - -public class GetUserLanguageResponse { - - @NotBlank(message = "언어 이름은 필수입니다.") - private String name; - - @NotBlank(message = "언어 코드는 필수입니다.") - @Size(min = 2, max = 2, message = "언어 코드는 정확히 2글자여야 합니다.") - private String code; // 언어 코드 (e.g., 'en', 'ko') -}