From 8a4a437ea30ffba5c8051299392abccea5a257f8 Mon Sep 17 00:00:00 2001 From: JangBJ Date: Mon, 14 Apr 2025 16:55:04 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8feat:=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B0=80=EB=8A=A5=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=F0=9F=94=97=20Resolves:=20#296?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/AuthController.java | 2 +- .../controller/impl/AuthControllerImpl.java | 3 +- .../jishop/member/service/AuthService.java | 1 + .../member/service/impl/AuthServiceImpl.java | 47 ++++++++++++++----- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/backend/JiShop/src/main/java/com/jishop/member/controller/AuthController.java b/backend/JiShop/src/main/java/com/jishop/member/controller/AuthController.java index 93e7c33a..f2257290 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/controller/AuthController.java +++ b/backend/JiShop/src/main/java/com/jishop/member/controller/AuthController.java @@ -16,7 +16,7 @@ public interface AuthController { ResponseEntity signIn(SignInFormRequest request, HttpServletRequest httpRequest, HttpServletResponse response); @Operation(summary = "회원 로그아웃") - ResponseEntity logout(HttpServletRequest request); + ResponseEntity logout(User user,HttpServletRequest request); @Operation(summary = "로그인 상태 체크") ResponseEntity checkLogin(User user); } diff --git a/backend/JiShop/src/main/java/com/jishop/member/controller/impl/AuthControllerImpl.java b/backend/JiShop/src/main/java/com/jishop/member/controller/impl/AuthControllerImpl.java index eb4d7ea6..00bf828b 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/controller/impl/AuthControllerImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/member/controller/impl/AuthControllerImpl.java @@ -45,12 +45,13 @@ public ResponseEntity signIn(@RequestBody @Valid SignInFormRequest reque } @GetMapping("/logout") - public ResponseEntity logout(HttpServletRequest request) { + public ResponseEntity logout(@CurrentUser User user, HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { // redis의 세션도 삭제 session.invalidate(); } + service.logout(user); return ResponseEntity.ok().build(); } diff --git a/backend/JiShop/src/main/java/com/jishop/member/service/AuthService.java b/backend/JiShop/src/main/java/com/jishop/member/service/AuthService.java index 45078968..3bb8b501 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/service/AuthService.java +++ b/backend/JiShop/src/main/java/com/jishop/member/service/AuthService.java @@ -19,4 +19,5 @@ public interface AuthService { Long checkLogin(User user); void updateAdSMSAgree(User user, UserAdSMSRequest request); void updateAdEmailAgree(User user, UserAdEmailRequest request); + void logout(User user); } diff --git a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java index 37709c5d..378629e7 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java @@ -67,13 +67,15 @@ public boolean checkPW(RecoveryPWRequest request){ } public void updatePW(User user, UserNewPasswordRequest request){ - if(passwordEncoder.matches(request.password(), user.getPassword())){ + User persistUser = getPersistUser(user); + + if(passwordEncoder.matches(request.password(), persistUser.getPassword())){ throw new DomainException(ErrorType.PASSWORD_EXISTS); } String password = passwordEncoder.encode(request.password()); - user.updatePassword(password); - updateUserCache(user); + persistUser.updatePassword(password); + updateUserCache(persistUser); } // todo: 회원 정보 조회 @@ -83,17 +85,22 @@ public UserResponse getUser(User user){ // todo: 회원 정보 수정 (이름, 전화번호) public void updateUserName(User user, UserNameRequest request) { - user.updateName(request.name()); - updateUserCache(user); + User persistUser = getPersistUser(user); + + persistUser.updateName(request.name()); + updateUserCache(persistUser); } public void updatePhone(User user, UserPhoneRequest request) { - user.updatePhone(request.phone()); - updateUserCache(user); + User persistUser = getPersistUser(user); + + persistUser.updatePhone(request.phone()); + updateUserCache(persistUser); } public void deleteUser(User user) { - user.delete(); + User persistUser = getPersistUser(user); + persistUser.delete(); } public Long checkLogin(User user) { @@ -101,13 +108,17 @@ public Long checkLogin(User user) { } public void updateAdSMSAgree(User user, UserAdSMSRequest request){ - user.updateAdSMSAgree(request.adSMSAgree()); - updateUserCache(user); + User persistUser = getPersistUser(user); + + persistUser.updateAdSMSAgree(request.adSMSAgree()); + updateUserCache(persistUser); } public void updateAdEmailAgree(User user, UserAdEmailRequest request){ - user.updateAdEmailAgree(request.adEmailAgree()); - updateUserCache(user); + User persistUser = getPersistUser(user); + + persistUser.updateAdEmailAgree(request.adEmailAgree()); + updateUserCache(persistUser); } private void updateUserCache(User user) { @@ -116,5 +127,17 @@ private void updateUserCache(User user) { redisTemplate.delete(cacheKey); redisTemplate.opsForValue().set(cacheKey, user, Duration.ofMinutes(30)); } + + private User getPersistUser(User user){ + User persistUser = userRepository.findById(user.getId()) + .orElseThrow(() -> new DomainException(ErrorType.USER_NOT_FOUND)); + + return persistUser; + } + + public void logout(User user) { + String cacheKey = "user::" + user.getId(); + redisTemplate.delete(cacheKey); + } } From 1ba1af190d2f5e6cc4cc247ac49c2d4bf6c88667 Mon Sep 17 00:00:00 2001 From: JangBJ Date: Wed, 16 Apr 2025 17:18:53 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=9B=A0refactor:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=F0=9F=94=97=20Resolves:=20#296?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/UserAdEmailRequest.java | 5 ++++ .../member/dto/request/UserAdSMSRequest.java | 5 ++++ .../member/dto/request/UserNameRequest.java | 4 +++ .../member/dto/request/UserPhoneRequest.java | 4 +++ .../member/service/impl/AuthServiceImpl.java | 28 ++++++++----------- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdEmailRequest.java b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdEmailRequest.java index 189b49fc..470be97a 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdEmailRequest.java +++ b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdEmailRequest.java @@ -1,6 +1,11 @@ package com.jishop.member.dto.request; +import com.jishop.member.domain.User; + public record UserAdEmailRequest( boolean adEmailAgree ) { + public void update(User user){ + user.updateAdEmailAgree(adEmailAgree); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdSMSRequest.java b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdSMSRequest.java index 8a7dc054..e52f7573 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdSMSRequest.java +++ b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserAdSMSRequest.java @@ -1,6 +1,11 @@ package com.jishop.member.dto.request; +import com.jishop.member.domain.User; + public record UserAdSMSRequest( boolean adSMSAgree ) { + public void update(User user){ + user.updateAdSMSAgree(adSMSAgree); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserNameRequest.java b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserNameRequest.java index 0f32e299..3152dc6a 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserNameRequest.java +++ b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserNameRequest.java @@ -1,9 +1,13 @@ package com.jishop.member.dto.request; +import com.jishop.member.domain.User; import jakarta.validation.constraints.NotBlank; public record UserNameRequest( @NotBlank String name ) { + public void update(User user){ + user.updateName(name); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserPhoneRequest.java b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserPhoneRequest.java index 6ecc22ae..0fd36082 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserPhoneRequest.java +++ b/backend/JiShop/src/main/java/com/jishop/member/dto/request/UserPhoneRequest.java @@ -1,9 +1,13 @@ package com.jishop.member.dto.request; +import com.jishop.member.domain.User; import jakarta.validation.constraints.NotBlank; public record UserPhoneRequest( @NotBlank String phone ) { + public void update(User user){ + user.updatePhone(phone); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java index 378629e7..0d6fa74e 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.Duration; +import java.util.function.Consumer; @Service @Transactional @@ -85,17 +86,11 @@ public UserResponse getUser(User user){ // todo: 회원 정보 수정 (이름, 전화번호) public void updateUserName(User user, UserNameRequest request) { - User persistUser = getPersistUser(user); - - persistUser.updateName(request.name()); - updateUserCache(persistUser); + applyAndCache(user, request::update); } public void updatePhone(User user, UserPhoneRequest request) { - User persistUser = getPersistUser(user); - - persistUser.updatePhone(request.phone()); - updateUserCache(persistUser); + applyAndCache(user, request::update); } public void deleteUser(User user) { @@ -108,21 +103,16 @@ public Long checkLogin(User user) { } public void updateAdSMSAgree(User user, UserAdSMSRequest request){ - User persistUser = getPersistUser(user); - - persistUser.updateAdSMSAgree(request.adSMSAgree()); - updateUserCache(persistUser); + applyAndCache(user, request::update); } public void updateAdEmailAgree(User user, UserAdEmailRequest request){ - User persistUser = getPersistUser(user); - - persistUser.updateAdEmailAgree(request.adEmailAgree()); - updateUserCache(persistUser); + applyAndCache(user, request::update); } private void updateUserCache(User user) { String cacheKey = "user::" + user.getId(); + // 캐시 업데이트 (기존 캐시 삭제 후 최신 정보로 재설정) redisTemplate.delete(cacheKey); redisTemplate.opsForValue().set(cacheKey, user, Duration.ofMinutes(30)); @@ -135,6 +125,12 @@ private User getPersistUser(User user){ return persistUser; } + private void applyAndCache(User user, Consumer update) { + User persistUser = getPersistUser(user); + update.accept(persistUser); + updateUserCache(persistUser); + } + public void logout(User user) { String cacheKey = "user::" + user.getId(); redisTemplate.delete(cacheKey); From 83425b9361ee2258abba87cb6f3c9131d5eddb0f Mon Sep 17 00:00:00 2001 From: JangBJ Date: Thu, 17 Apr 2025 11:25:32 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=9B=A0refactor:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=F0=9F=94=97=20Resolves:=20#296?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jishop/member/repository/UserRepository.java | 6 ++++++ .../com/jishop/member/service/impl/AuthServiceImpl.java | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/JiShop/src/main/java/com/jishop/member/repository/UserRepository.java b/backend/JiShop/src/main/java/com/jishop/member/repository/UserRepository.java index d9bf6966..4378689b 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/repository/UserRepository.java +++ b/backend/JiShop/src/main/java/com/jishop/member/repository/UserRepository.java @@ -1,5 +1,7 @@ package com.jishop.member.repository; +import com.jishop.common.exception.DomainException; +import com.jishop.common.exception.ErrorType; import com.jishop.member.domain.LoginType; import com.jishop.member.domain.User; import org.springframework.data.jpa.repository.JpaRepository; @@ -15,4 +17,8 @@ public interface UserRepository extends JpaRepository { Optional findByPhone(String phone); boolean existsByLoginId(String loginId); + + default User findPersistUser(User user) { + return findById(user.getId()).orElseThrow(() -> new DomainException(ErrorType.USER_NOT_FOUND)); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java index 0d6fa74e..3d5d01dc 100644 --- a/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/member/service/impl/AuthServiceImpl.java @@ -119,8 +119,7 @@ private void updateUserCache(User user) { } private User getPersistUser(User user){ - User persistUser = userRepository.findById(user.getId()) - .orElseThrow(() -> new DomainException(ErrorType.USER_NOT_FOUND)); + User persistUser = userRepository.findPersistUser(user); return persistUser; }