From e17f94d4599884638019fcbecc0f5c92b66ebb2c Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:08:06 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[CHORE]=20prePostEnabled=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20Con?= =?UTF-8?q?fig=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=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 --- .../org/terning/terningserver/common/config/SecurityConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java b/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java index 2ef391b..73df1c0 100644 --- a/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java +++ b/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; @@ -15,6 +16,7 @@ @Configuration @EnableWebSecurity @RequiredArgsConstructor +@EnableMethodSecurity(pre) public class SecurityConfig { private final JwtAuthenticationFilter jwtAuthenticationFilter; From b294e106499b362984e4af8e9ee835e67342d4b4 Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:09:13 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=EB=A5=BC=20=EB=8B=B4=EB=8B=B9=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=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 --- .../terningserver/auth/api/AuthController.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/terning/terningserver/auth/api/AuthController.java b/src/main/java/org/terning/terningserver/auth/api/AuthController.java index 81b92c8..7424494 100644 --- a/src/main/java/org/terning/terningserver/auth/api/AuthController.java +++ b/src/main/java/org/terning/terningserver/auth/api/AuthController.java @@ -6,6 +6,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.terning.terningserver.auth.application.AuthService; +import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest; import org.terning.terningserver.auth.dto.request.SignInRequest; import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto; import org.terning.terningserver.auth.dto.request.SignUpRequestDto; @@ -19,6 +20,7 @@ import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_OUT; import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP; import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP_FILTER; +import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_USER_SYNC; import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_WITHDRAW; @@ -78,4 +80,13 @@ public ResponseEntity withdraw(@AuthenticationPrincipal Long us return ResponseEntity.ok(SuccessResponse.of(SUCCESS_WITHDRAW)); } + + @PostMapping("/sync-user") + public ResponseEntity syncUser( + @AuthenticationPrincipal Long userId, + @RequestBody FcmTokenSyncRequest request + ) { + authService.syncUser(userId, request); + return ResponseEntity.ok(SuccessResponse.of(SUCCESS_USER_SYNC)); + } } From 6d2a584f471992b18e0e4b2495afa0c8238a49d3 Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:09:43 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[CHORE]=20Swagger=20=EC=97=90=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EB=8F=99=EA=B8=B0=ED=99=94=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/terning/terningserver/auth/api/AuthSwagger.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/terning/terningserver/auth/api/AuthSwagger.java b/src/main/java/org/terning/terningserver/auth/api/AuthSwagger.java index 104f1e3..7151626 100644 --- a/src/main/java/org/terning/terningserver/auth/api/AuthSwagger.java +++ b/src/main/java/org/terning/terningserver/auth/api/AuthSwagger.java @@ -7,6 +7,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; +import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest; import org.terning.terningserver.auth.dto.request.SignInRequest; import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto; import org.terning.terningserver.auth.dto.request.SignUpRequestDto; @@ -52,4 +53,10 @@ ResponseEntity signOut( @Operation(summary = "계정탈퇴", description = "계정탈퇴 API") ResponseEntity withdraw( @AuthenticationPrincipal Long userId); + + @Operation(summary = "유저동기화", description = "유저동기화 API") + ResponseEntity syncUser( + @AuthenticationPrincipal Long userId, + @RequestBody FcmTokenSyncRequest request + ); } From 6cb6f37eaca66ee37c83eb390839b02f420050af Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:10:26 +0900 Subject: [PATCH 4/9] =?UTF-8?q?[FEAT]=20authSyncUserService=EB=A1=9C=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terningserver/auth/application/AuthService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/terning/terningserver/auth/application/AuthService.java b/src/main/java/org/terning/terningserver/auth/application/AuthService.java index 6e4d5c8..58a3326 100644 --- a/src/main/java/org/terning/terningserver/auth/application/AuthService.java +++ b/src/main/java/org/terning/terningserver/auth/application/AuthService.java @@ -7,7 +7,9 @@ import org.terning.terningserver.auth.application.signin.AuthSignInService; import org.terning.terningserver.auth.application.signout.AuthSignOutService; import org.terning.terningserver.auth.application.signup.AuthSignUpService; +import org.terning.terningserver.auth.application.syncUser.AuthSyncUserService; import org.terning.terningserver.auth.application.withdraw.AuthWithdrawService; +import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest; import org.terning.terningserver.auth.dto.request.SignInRequest; import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto; import org.terning.terningserver.auth.dto.request.SignUpRequestDto; @@ -25,6 +27,7 @@ public class AuthService { private final AuthSignOutService authSignOutService; private final AuthWithdrawService authWithdrawService; private final AuthReissueService authReissueService; + private final AuthSyncUserService authSyncUserService; @Transactional public SignInResponse signIn(String authAccessToken, SignInRequest request) { @@ -58,4 +61,9 @@ public AccessTokenGetResponseDto reissueToken(String refreshToken) { AccessTokenGetResponseDto accessTokenGetResponseDto = authReissueService.reissueToken(refreshToken); return accessTokenGetResponseDto; } + + @Transactional + public void syncUser(long userId, FcmTokenSyncRequest request) { + authSyncUserService.syncUser(userId, request); + } } From a6651cda9fdee793ef07df0f232afbe0ecb17c38 Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:10:56 +0900 Subject: [PATCH 5/9] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/application/syncUser/AuthSyncUserService.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserService.java diff --git a/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserService.java b/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserService.java new file mode 100644 index 0000000..205dee8 --- /dev/null +++ b/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserService.java @@ -0,0 +1,8 @@ +package org.terning.terningserver.auth.application.syncUser; + +import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest; + +public interface AuthSyncUserService { + + void syncUser(long userId, FcmTokenSyncRequest request); +} From 67ca596dd270c6c4908ab194e2e9862c32d920dc Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:11:04 +0900 Subject: [PATCH 6/9] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84=EC=B2=B4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncUser/AuthSyncUserServiceImpl.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserServiceImpl.java diff --git a/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserServiceImpl.java b/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserServiceImpl.java new file mode 100644 index 0000000..731d5f0 --- /dev/null +++ b/src/main/java/org/terning/terningserver/auth/application/syncUser/AuthSyncUserServiceImpl.java @@ -0,0 +1,29 @@ +package org.terning.terningserver.auth.application.syncUser; + +import static org.terning.terningserver.common.exception.enums.ErrorMessage.NOT_FOUND_USER_EXCEPTION; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest; +import org.terning.terningserver.common.exception.CustomException; +import org.terning.terningserver.external.pushNotification.notification.NotificationUserClient; +import org.terning.terningserver.user.domain.User; +import org.terning.terningserver.user.repository.UserRepository; + +@Service +@RequiredArgsConstructor +public class AuthSyncUserServiceImpl implements AuthSyncUserService { + + private final UserRepository userRepository; + private final NotificationUserClient notificationUserClient; + + @Transactional + @Override + public void syncUser(long userId, FcmTokenSyncRequest request) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new CustomException(NOT_FOUND_USER_EXCEPTION)); + + notificationUserClient.createOrUpdateUser(user, request.fcmToken()); + } +} From 8fa3172f7bccbcc3b50ec0ba01780ee99ad27902 Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:11:18 +0900 Subject: [PATCH 7/9] =?UTF-8?q?[FEAT]=20=EC=9C=A0=EC=A0=80=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EA=B4=80=EB=A0=A8=20dto=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terningserver/auth/dto/request/FcmTokenSyncRequest.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/org/terning/terningserver/auth/dto/request/FcmTokenSyncRequest.java diff --git a/src/main/java/org/terning/terningserver/auth/dto/request/FcmTokenSyncRequest.java b/src/main/java/org/terning/terningserver/auth/dto/request/FcmTokenSyncRequest.java new file mode 100644 index 0000000..205841c --- /dev/null +++ b/src/main/java/org/terning/terningserver/auth/dto/request/FcmTokenSyncRequest.java @@ -0,0 +1,6 @@ +package org.terning.terningserver.auth.dto.request; + +public record FcmTokenSyncRequest( + String fcmToken +) { +} From 982d9f05f9259be4932b5c7ffe768eb799a0ebaf Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:11:38 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[CHORE]=20=EC=9C=A0=EC=A0=80=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=84=B1=EA=B3=B5=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terningserver/common/exception/enums/SuccessMessage.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/terning/terningserver/common/exception/enums/SuccessMessage.java b/src/main/java/org/terning/terningserver/common/exception/enums/SuccessMessage.java index bf5c98b..f762f48 100644 --- a/src/main/java/org/terning/terningserver/common/exception/enums/SuccessMessage.java +++ b/src/main/java/org/terning/terningserver/common/exception/enums/SuccessMessage.java @@ -55,8 +55,10 @@ public enum SuccessMessage { // My page (마이페이지 화면) SUCCESS_GET_PROFILE(200, "마이페이지 > 프로필 정보 불러오기를 성공했습니다"), SUCCESS_UPDATE_PROFILE(200, "프로필 수정에 성공했습니다"), - PUSH_STATUS_UPDATED(200, "사용자 푸시알림 여부 변경을 완료했습니다."); + PUSH_STATUS_UPDATED(200, "사용자 푸시알림 여부 변경을 완료했습니다."), + // 유저 동기화 + SUCCESS_USER_SYNC(201, "유저 동기화를 성공했습니다."); private final int status; private final String message; From 835b3f0a44a71efd6e9d2a406d939c5da5f14d0c Mon Sep 17 00:00:00 2001 From: Willy Date: Sun, 11 May 2025 20:19:23 +0900 Subject: [PATCH 9/9] =?UTF-8?q?[CHORE]=20prePostEnabled=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20Con?= =?UTF-8?q?fig=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=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 --- .../org/terning/terningserver/common/config/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java b/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java index 73df1c0..f984b4f 100644 --- a/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java +++ b/src/main/java/org/terning/terningserver/common/config/SecurityConfig.java @@ -16,7 +16,7 @@ @Configuration @EnableWebSecurity @RequiredArgsConstructor -@EnableMethodSecurity(pre) +@EnableMethodSecurity public class SecurityConfig { private final JwtAuthenticationFilter jwtAuthenticationFilter;