Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;


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

return ResponseEntity.ok(SuccessResponse.of(SUCCESS_WITHDRAW));
}

@PostMapping("/sync-user")
public ResponseEntity<SuccessResponse> syncUser(
@AuthenticationPrincipal Long userId,
@RequestBody FcmTokenSyncRequest request
) {
authService.syncUser(userId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_USER_SYNC));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -52,4 +53,10 @@ ResponseEntity<SuccessResponse> signOut(
@Operation(summary = "계정탈퇴", description = "계정탈퇴 API")
ResponseEntity<SuccessResponse> withdraw(
@AuthenticationPrincipal Long userId);

@Operation(summary = "유저동기화", description = "유저동기화 API")
ResponseEntity<SuccessResponse> syncUser(
@AuthenticationPrincipal Long userId,
@RequestBody FcmTokenSyncRequest request
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -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());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.terning.terningserver.auth.dto.request;

public record FcmTokenSyncRequest(
String fcmToken
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -15,6 +16,7 @@
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableMethodSecurity
public class SecurityConfig {

private final JwtAuthenticationFilter jwtAuthenticationFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Loading