Skip to content

Commit 8d8230a

Browse files
author
Willie
authored
Merge pull request #244 from teamterning/feat/#243
[✨ feat] 일회성 유저 동기화 API 구현
2 parents ac17c64 + 835b3f0 commit 8d8230a

File tree

8 files changed

+74
-1
lines changed

8 files changed

+74
-1
lines changed

src/main/java/org/terning/terningserver/auth/api/AuthController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.security.core.annotation.AuthenticationPrincipal;
77
import org.springframework.web.bind.annotation.*;
88
import org.terning.terningserver.auth.application.AuthService;
9+
import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest;
910
import org.terning.terningserver.auth.dto.request.SignInRequest;
1011
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
1112
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
@@ -19,6 +20,7 @@
1920
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_OUT;
2021
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP;
2122
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP_FILTER;
23+
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_USER_SYNC;
2224
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_WITHDRAW;
2325

2426

@@ -78,4 +80,13 @@ public ResponseEntity<SuccessResponse> withdraw(@AuthenticationPrincipal Long us
7880

7981
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_WITHDRAW));
8082
}
83+
84+
@PostMapping("/sync-user")
85+
public ResponseEntity<SuccessResponse> syncUser(
86+
@AuthenticationPrincipal Long userId,
87+
@RequestBody FcmTokenSyncRequest request
88+
) {
89+
authService.syncUser(userId, request);
90+
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_USER_SYNC));
91+
}
8192
}

src/main/java/org/terning/terningserver/auth/api/AuthSwagger.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.security.core.annotation.AuthenticationPrincipal;
88
import org.springframework.web.bind.annotation.RequestBody;
99
import org.springframework.web.bind.annotation.RequestHeader;
10+
import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest;
1011
import org.terning.terningserver.auth.dto.request.SignInRequest;
1112
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
1213
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
@@ -52,4 +53,10 @@ ResponseEntity<SuccessResponse> signOut(
5253
@Operation(summary = "계정탈퇴", description = "계정탈퇴 API")
5354
ResponseEntity<SuccessResponse> withdraw(
5455
@AuthenticationPrincipal Long userId);
56+
57+
@Operation(summary = "유저동기화", description = "유저동기화 API")
58+
ResponseEntity<SuccessResponse> syncUser(
59+
@AuthenticationPrincipal Long userId,
60+
@RequestBody FcmTokenSyncRequest request
61+
);
5562
}

src/main/java/org/terning/terningserver/auth/application/AuthService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import org.terning.terningserver.auth.application.signin.AuthSignInService;
88
import org.terning.terningserver.auth.application.signout.AuthSignOutService;
99
import org.terning.terningserver.auth.application.signup.AuthSignUpService;
10+
import org.terning.terningserver.auth.application.syncUser.AuthSyncUserService;
1011
import org.terning.terningserver.auth.application.withdraw.AuthWithdrawService;
12+
import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest;
1113
import org.terning.terningserver.auth.dto.request.SignInRequest;
1214
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
1315
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
@@ -25,6 +27,7 @@ public class AuthService {
2527
private final AuthSignOutService authSignOutService;
2628
private final AuthWithdrawService authWithdrawService;
2729
private final AuthReissueService authReissueService;
30+
private final AuthSyncUserService authSyncUserService;
2831

2932
@Transactional
3033
public SignInResponse signIn(String authAccessToken, SignInRequest request) {
@@ -58,4 +61,9 @@ public AccessTokenGetResponseDto reissueToken(String refreshToken) {
5861
AccessTokenGetResponseDto accessTokenGetResponseDto = authReissueService.reissueToken(refreshToken);
5962
return accessTokenGetResponseDto;
6063
}
64+
65+
@Transactional
66+
public void syncUser(long userId, FcmTokenSyncRequest request) {
67+
authSyncUserService.syncUser(userId, request);
68+
}
6169
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.terning.terningserver.auth.application.syncUser;
2+
3+
import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest;
4+
5+
public interface AuthSyncUserService {
6+
7+
void syncUser(long userId, FcmTokenSyncRequest request);
8+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.terning.terningserver.auth.application.syncUser;
2+
3+
import static org.terning.terningserver.common.exception.enums.ErrorMessage.NOT_FOUND_USER_EXCEPTION;
4+
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Service;
7+
import org.springframework.transaction.annotation.Transactional;
8+
import org.terning.terningserver.auth.dto.request.FcmTokenSyncRequest;
9+
import org.terning.terningserver.common.exception.CustomException;
10+
import org.terning.terningserver.external.pushNotification.notification.NotificationUserClient;
11+
import org.terning.terningserver.user.domain.User;
12+
import org.terning.terningserver.user.repository.UserRepository;
13+
14+
@Service
15+
@RequiredArgsConstructor
16+
public class AuthSyncUserServiceImpl implements AuthSyncUserService {
17+
18+
private final UserRepository userRepository;
19+
private final NotificationUserClient notificationUserClient;
20+
21+
@Transactional
22+
@Override
23+
public void syncUser(long userId, FcmTokenSyncRequest request) {
24+
User user = userRepository.findById(userId)
25+
.orElseThrow(() -> new CustomException(NOT_FOUND_USER_EXCEPTION));
26+
27+
notificationUserClient.createOrUpdateUser(user, request.fcmToken());
28+
}
29+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.terning.terningserver.auth.dto.request;
2+
3+
public record FcmTokenSyncRequest(
4+
String fcmToken
5+
) {
6+
}

src/main/java/org/terning/terningserver/common/config/SecurityConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import lombok.RequiredArgsConstructor;
44
import org.springframework.context.annotation.Bean;
55
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
67
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
78
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
@@ -15,6 +16,7 @@
1516
@Configuration
1617
@EnableWebSecurity
1718
@RequiredArgsConstructor
19+
@EnableMethodSecurity
1820
public class SecurityConfig {
1921

2022
private final JwtAuthenticationFilter jwtAuthenticationFilter;

src/main/java/org/terning/terningserver/common/exception/enums/SuccessMessage.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ public enum SuccessMessage {
5555
// My page (마이페이지 화면)
5656
SUCCESS_GET_PROFILE(200, "마이페이지 > 프로필 정보 불러오기를 성공했습니다"),
5757
SUCCESS_UPDATE_PROFILE(200, "프로필 수정에 성공했습니다"),
58-
PUSH_STATUS_UPDATED(200, "사용자 푸시알림 여부 변경을 완료했습니다.");
58+
PUSH_STATUS_UPDATED(200, "사용자 푸시알림 여부 변경을 완료했습니다."),
5959

60+
// 유저 동기화
61+
SUCCESS_USER_SYNC(201, "유저 동기화를 성공했습니다.");
6062

6163
private final int status;
6264
private final String message;

0 commit comments

Comments
 (0)