From f951199b2b3c8f2bc49020ce065fad0e62132843 Mon Sep 17 00:00:00 2001 From: Youngjoo Date: Mon, 2 Sep 2024 22:24:34 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor=20:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20DTO=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 ++++- .../user/controller/UserApiController.java | 9 +++------ ...nUpUserResponse.java => SignUpResponse.java} | 6 +++++- .../wanted/ribbon/user/service/UserService.java | 17 ++++++++++------- 4 files changed, 22 insertions(+), 15 deletions(-) rename src/main/java/wanted/ribbon/user/dto/{SignUpUserResponse.java => SignUpResponse.java} (51%) diff --git a/build.gradle b/build.gradle index 5923ae0..2e51bc1 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'io.jsonwebtoken:jjwt:0.9.1' // 자바 JWT 라이브러리 - implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML 문서와 Java 객체 간 매핑 자동화 + implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML 문서와 Java 객체 간 매핑 자동화 + annotationProcessor('org.projectlombok:lombok') // test를 위한 롬복 추가 + testAnnotationProcessor('org.projectlombok:lombok') + // Jackson implementation 'com.fasterxml.jackson.core:jackson-databind' // Spring Batch diff --git a/src/main/java/wanted/ribbon/user/controller/UserApiController.java b/src/main/java/wanted/ribbon/user/controller/UserApiController.java index 4889aa1..2470da9 100644 --- a/src/main/java/wanted/ribbon/user/controller/UserApiController.java +++ b/src/main/java/wanted/ribbon/user/controller/UserApiController.java @@ -6,10 +6,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import wanted.ribbon.user.domain.User; -import wanted.ribbon.user.dto.SignUpUserRequest; -import wanted.ribbon.user.dto.UpdateUserRequest; -import wanted.ribbon.user.dto.UserLoginRequestDto; -import wanted.ribbon.user.dto.UserLoginResponseDto; +import wanted.ribbon.user.dto.*; import wanted.ribbon.user.service.UserService; import java.util.UUID; @@ -21,8 +18,8 @@ public class UserApiController { private final UserService userService; @PostMapping("/signup") - public ResponseEntity signUp(@Validated @RequestBody SignUpUserRequest request){ - UUID response = userService.save(request); + public ResponseEntity signUp(@Validated @RequestBody SignUpUserRequest request){ + SignUpResponse response = userService.save(request); return ResponseEntity.status(HttpStatus.CREATED).body(response); } diff --git a/src/main/java/wanted/ribbon/user/dto/SignUpUserResponse.java b/src/main/java/wanted/ribbon/user/dto/SignUpResponse.java similarity index 51% rename from src/main/java/wanted/ribbon/user/dto/SignUpUserResponse.java rename to src/main/java/wanted/ribbon/user/dto/SignUpResponse.java index c3f2407..75b0783 100644 --- a/src/main/java/wanted/ribbon/user/dto/SignUpUserResponse.java +++ b/src/main/java/wanted/ribbon/user/dto/SignUpResponse.java @@ -1,6 +1,10 @@ package wanted.ribbon.user.dto; -public record SignUpUserResponse( +import java.util.UUID; + +public record SignUpResponse( String message, + UUID userId, String id + ) { } diff --git a/src/main/java/wanted/ribbon/user/service/UserService.java b/src/main/java/wanted/ribbon/user/service/UserService.java index 0764036..8008d69 100644 --- a/src/main/java/wanted/ribbon/user/service/UserService.java +++ b/src/main/java/wanted/ribbon/user/service/UserService.java @@ -7,10 +7,7 @@ import wanted.ribbon.exception.NotFoundException; import wanted.ribbon.user.config.TokenProvider; import wanted.ribbon.user.domain.User; -import wanted.ribbon.user.dto.SignUpUserRequest; -import wanted.ribbon.user.dto.UpdateUserRequest; -import wanted.ribbon.user.dto.UserLoginRequestDto; -import wanted.ribbon.user.dto.UserLoginResponseDto; +import wanted.ribbon.user.dto.*; import wanted.ribbon.user.repository.UserRepository; import java.time.Duration; @@ -24,11 +21,17 @@ public class UserService { private final TokenProvider tokenProvider; // TokenProvider를 사용 private final TokenService tokenService; // TokenService를 사용 - public UUID save(SignUpUserRequest dto){ - return userRepository.save(User.builder() + public SignUpResponse save(SignUpUserRequest dto){ + User user = userRepository.save(User.builder() .id(dto.getId()) .password(bCryptPasswordEncoder.encode(dto.getPassword())) // 패스워드 암호화 - .build()).getUserId(); + .build()); + + return new SignUpResponse( + "회원가입 성공", + user.getUserId(), + user.getId() + ); } public User findByUserId(UUID userId){ From d306b26696fbe4e3eb2dbe06af1a214b6deb59b9 Mon Sep 17 00:00:00 2001 From: Youngjoo Date: Tue, 3 Sep 2024 15:56:41 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactor=20:=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20DTO=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ribbon/user/config/WebSecurityConfig.java | 2 +- .../user/controller/UserApiController.java | 4 ++-- .../ribbon/user/dto/UpdateUserResponse.java | 12 ++++++++++++ .../wanted/ribbon/user/service/UserService.java | 16 ++++++++++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/main/java/wanted/ribbon/user/dto/UpdateUserResponse.java diff --git a/src/main/java/wanted/ribbon/user/config/WebSecurityConfig.java b/src/main/java/wanted/ribbon/user/config/WebSecurityConfig.java index 003df2c..0b848bb 100644 --- a/src/main/java/wanted/ribbon/user/config/WebSecurityConfig.java +++ b/src/main/java/wanted/ribbon/user/config/WebSecurityConfig.java @@ -25,7 +25,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .httpBasic(AbstractHttpConfigurer::disable) .csrf(AbstractHttpConfigurer::disable) .authorizeRequests(auth -> auth - .requestMatchers("/api/user/login", "/api/user/signup").permitAll() + .requestMatchers("/api/users/login", "/api/users/signup").permitAll() .anyRequest().authenticated()) .formLogin(AbstractHttpConfigurer::disable) .addFilterBefore(new TokenAuthenticationFilter(tokenProvider), UsernamePasswordAuthenticationFilter.class); diff --git a/src/main/java/wanted/ribbon/user/controller/UserApiController.java b/src/main/java/wanted/ribbon/user/controller/UserApiController.java index 2470da9..56942cb 100644 --- a/src/main/java/wanted/ribbon/user/controller/UserApiController.java +++ b/src/main/java/wanted/ribbon/user/controller/UserApiController.java @@ -37,8 +37,8 @@ public ResponseEntity getUserInfo(@PathVariable UUID userId){ } @PutMapping("/settings/{userId}") - public ResponseEntity updateUser(@PathVariable UUID userId, @RequestBody UpdateUserRequest request){ - User updatedUser = userService.updateUser(userId, request); + public ResponseEntity updateUser(@PathVariable UUID userId, @RequestBody UpdateUserRequest request){ + UpdateUserResponse updatedUser = userService.updateUser(userId, request); return ResponseEntity.status(HttpStatus.OK).body(updatedUser); } } diff --git a/src/main/java/wanted/ribbon/user/dto/UpdateUserResponse.java b/src/main/java/wanted/ribbon/user/dto/UpdateUserResponse.java new file mode 100644 index 0000000..be241fc --- /dev/null +++ b/src/main/java/wanted/ribbon/user/dto/UpdateUserResponse.java @@ -0,0 +1,12 @@ +package wanted.ribbon.user.dto; + +import java.util.UUID; + +public record UpdateUserResponse( + String message, + UUID userId, + double lat, + double lon, + boolean recommend +) { } + diff --git a/src/main/java/wanted/ribbon/user/service/UserService.java b/src/main/java/wanted/ribbon/user/service/UserService.java index 8008d69..5afd71f 100644 --- a/src/main/java/wanted/ribbon/user/service/UserService.java +++ b/src/main/java/wanted/ribbon/user/service/UserService.java @@ -1,5 +1,6 @@ package wanted.ribbon.user.service; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @@ -39,7 +40,8 @@ public User findByUserId(UUID userId){ .orElseThrow(() -> new NotFoundException(ErrorCode.ENTITY_NOT_FOUND)); } - public User updateUser(UUID userId, UpdateUserRequest request) { + @Transactional + public UpdateUserResponse updateUser(UUID userId, UpdateUserRequest request) { // 1. 유저 정보 조회 User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException(ErrorCode.ENTITY_NOT_FOUND)); @@ -50,9 +52,19 @@ public User updateUser(UUID userId, UpdateUserRequest request) { user.setRecommend(request.isRecommend()); // 3. 변경된 유저 객체 저장 - return userRepository.save(user); + User updatedUser = userRepository.save(user); + + // 4. UpdateUserResponse 생성 및 반환 + return new UpdateUserResponse( + "위도, 경도, 추천 여부 변경 완료", + user.getUserId(), + user.getLat(), + user.getLon(), + user.isRecommend() + ); } + @Transactional public UserLoginResponseDto login(UserLoginRequestDto requestDto) { // 사용자 조회 User user = userRepository.findById(requestDto.getId()) From d092904a92f1b7a2df9e62bc102c38a9b70dfcbc Mon Sep 17 00:00:00 2001 From: Youngjoo Date: Tue, 3 Sep 2024 16:15:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor=20:=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20DTO=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ribbon/user/controller/UserApiController.java | 7 +++---- .../java/wanted/ribbon/user/dto/ProfileRequest.java | 13 +++++++++++++ .../wanted/ribbon/user/dto/ProfileResponse.java | 9 +++++++++ .../wanted/ribbon/user/service/UserService.java | 12 ++++++++++-- 4 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 src/main/java/wanted/ribbon/user/dto/ProfileRequest.java create mode 100644 src/main/java/wanted/ribbon/user/dto/ProfileResponse.java diff --git a/src/main/java/wanted/ribbon/user/controller/UserApiController.java b/src/main/java/wanted/ribbon/user/controller/UserApiController.java index 56942cb..32e9abe 100644 --- a/src/main/java/wanted/ribbon/user/controller/UserApiController.java +++ b/src/main/java/wanted/ribbon/user/controller/UserApiController.java @@ -5,7 +5,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import wanted.ribbon.user.domain.User; import wanted.ribbon.user.dto.*; import wanted.ribbon.user.service.UserService; @@ -31,9 +30,9 @@ public ResponseEntity login(@RequestBody UserLoginRequestD } @GetMapping("/profile/{userId}") - public ResponseEntity getUserInfo(@PathVariable UUID userId){ - User user = userService.findByUserId(userId); - return ResponseEntity.status(HttpStatus.OK).body(user); + public ResponseEntity getUserInfo(@PathVariable UUID userId, @RequestBody ProfileRequest request){ + ProfileResponse profile = userService.findByUser(userId, request); + return ResponseEntity.ok(profile); } @PutMapping("/settings/{userId}") diff --git a/src/main/java/wanted/ribbon/user/dto/ProfileRequest.java b/src/main/java/wanted/ribbon/user/dto/ProfileRequest.java new file mode 100644 index 0000000..58d597b --- /dev/null +++ b/src/main/java/wanted/ribbon/user/dto/ProfileRequest.java @@ -0,0 +1,13 @@ +package wanted.ribbon.user.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ProfileRequest { + private String id; + private double lat; + private double lon; + private boolean recommend; +} diff --git a/src/main/java/wanted/ribbon/user/dto/ProfileResponse.java b/src/main/java/wanted/ribbon/user/dto/ProfileResponse.java new file mode 100644 index 0000000..e803c7c --- /dev/null +++ b/src/main/java/wanted/ribbon/user/dto/ProfileResponse.java @@ -0,0 +1,9 @@ +package wanted.ribbon.user.dto; + +public record ProfileResponse( + String message, + String id, + double lat, + double lon, + boolean recommend +) { } diff --git a/src/main/java/wanted/ribbon/user/service/UserService.java b/src/main/java/wanted/ribbon/user/service/UserService.java index 5afd71f..2f05c4e 100644 --- a/src/main/java/wanted/ribbon/user/service/UserService.java +++ b/src/main/java/wanted/ribbon/user/service/UserService.java @@ -35,9 +35,17 @@ public SignUpResponse save(SignUpUserRequest dto){ ); } - public User findByUserId(UUID userId){ - return userRepository.findById(userId) + public ProfileResponse findByUser(UUID userId, ProfileRequest request){ + User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException(ErrorCode.ENTITY_NOT_FOUND)); + + return new ProfileResponse( + "회원 조회 성공", + user.getId(), + user.getLat(), + user.getLon(), + user.isRecommend() + ); } @Transactional From e47a433ad79f3592d53aac0ba177fc0ea70e434f Mon Sep 17 00:00:00 2001 From: K-0joo <83263735+K-0joo@users.noreply.github.com> Date: Tue, 3 Sep 2024 17:02:21 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[refactor]=20=EC=A4=91=EB=B3=B5=EB=90=9C=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2e51bc1..46de497 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'io.jsonwebtoken:jjwt:0.9.1' // 자바 JWT 라이브러리 implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML 문서와 Java 객체 간 매핑 자동화 - annotationProcessor('org.projectlombok:lombok') // test를 위한 롬복 추가 testAnnotationProcessor('org.projectlombok:lombok') // Jackson