Skip to content

Commit 2c12e10

Browse files
committed
✨ Feat: FCM 토큰 값 저장 API 구현
1 parent 6cd26cd commit 2c12e10

File tree

6 files changed

+51
-5
lines changed

6 files changed

+51
-5
lines changed

src/main/java/treehouse/server/api/user/business/UserMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,11 @@ public static UserResponseDTO.pushAgree toPushAgree(User user, UserRequestDTO.pu
8888
.isPushAgree(request.isPushAgree())
8989
.build();
9090
}
91+
92+
public static UserResponseDTO.saveFcmToken toSaveFcmToken(User user, boolean isSuccess) {
93+
return UserResponseDTO.saveFcmToken.builder()
94+
.userId(user.getId())
95+
.isSaveFcmToken(isSuccess)
96+
.build();
97+
}
9198
}

src/main/java/treehouse/server/api/user/persistence/FcmTokenRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ public interface FcmTokenRepository extends JpaRepository<FcmToken, Long> {
1616

1717
boolean existsByUserAndToken(User user, String token);
1818

19-
List<FcmToken> findAllByUserAndPushAllowed(User user, boolean pushAllowed);
19+
List<FcmToken> findAllByUser(User user);
2020
}

src/main/java/treehouse/server/api/user/presentation/UserApi.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import treehouse.server.api.user.presentation.dto.UserResponseDTO;
1313
import treehouse.server.global.common.CommonResponse;
1414
import treehouse.server.global.entity.User.User;
15+
import treehouse.server.global.fcm.dto.FCMDto;
16+
import treehouse.server.global.fcm.service.FcmService;
1517
import treehouse.server.global.security.handler.annotation.AuthMember;
1618

1719
@RestController
@@ -23,6 +25,7 @@
2325
public class UserApi {
2426

2527
private final UserService userService;
28+
private final FcmService fcmService;
2629

2730
@PostMapping("/checkName")
2831
@Operation(summary = "아이디 중복 체크 ✅", description = "서비스에서 사용할 유저이름을 중복 체크합니다.")
@@ -76,11 +79,18 @@ public CommonResponse<UserResponseDTO.withdraw> withdraw(
7679
@Operation(summary = "푸시 알림 동의 API 🔑✅️", description = "푸시 알림 동의 API입니다.")
7780
public CommonResponse<UserResponseDTO.pushAgree> pushAgree(
7881
@AuthMember @Parameter(hidden = true) User user,
79-
UserRequestDTO.pushAgreeDto request
82+
@RequestBody UserRequestDTO.pushAgreeDto request
8083
){
8184
return CommonResponse.onSuccess(userService.updatePushAgree(user,request));
8285
}
8386

8487

85-
88+
@PostMapping("/fcm-token")
89+
@Operation(summary = "FCM 토큰 저장 API 🔑✅️", description = "FCM 토큰 저장 API입니다.")
90+
public CommonResponse<UserResponseDTO.saveFcmToken> saveFcmToken(
91+
@AuthMember @Parameter(hidden = true) User user,
92+
@RequestBody FCMDto.saveFcmTokenDto request
93+
){
94+
return CommonResponse.onSuccess(fcmService.saveFcmToken(user,request));
95+
}
8696
}

src/main/java/treehouse/server/api/user/presentation/dto/UserResponseDTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,13 @@ public static class pushAgree {
9090
private Long userId;
9191
private boolean isPushAgree;
9292
}
93+
94+
@Builder
95+
@Getter
96+
@NoArgsConstructor
97+
@AllArgsConstructor
98+
public static class saveFcmToken {
99+
private Long userId;
100+
private boolean isSaveFcmToken;
101+
}
93102
}

src/main/java/treehouse/server/global/exception/GlobalErrorCode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,9 @@ public enum GlobalErrorCode implements BaseErrorCode{
9999
PHONE_AUTH_WRONG(BAD_REQUEST, "NCP400_2", "잘못된 인증 번호 입니다."),
100100
PHONE_AUTH_TIMEOUT(BAD_REQUEST, "NCP400_3", "인증 시간이 초과되었습니다."),
101101

102+
FCM_ALREADY_EXISTS_TOKEN(BAD_REQUEST, "FCM400_1", "이미 저장되어 있는 FCM 토큰입니다."),
102103
FCM_ACCESS_TOKEN_REQUEST_ERROR(INTERNAL_SERVER_ERROR, "FCM500_2", "서버 에러, FCM 서버에 AccessToken 요청할 때 에러 발생."),
103-
FCM_SEND_MESSAGE_ERROR(INTERNAL_SERVER_ERROR, "FCM500_3", "서버 에러, FCM 서버에 메시지를 전송할 때 에러 발생. FcmToken이 유효한지 확인해주세요.");
104+
FCM_SEND_MESSAGE_ERROR(INTERNAL_SERVER_ERROR , "FCM500_3", "서버 에러, FCM 서버에 메시지를 전송할 때 에러 발생. FcmToken이 유효한지 확인해주세요.");
104105

105106
;
106107

src/main/java/treehouse/server/global/fcm/service/FcmService.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import org.slf4j.LoggerFactory;
1010
import org.springframework.stereotype.Service;
1111
import org.springframework.transaction.annotation.Transactional;
12+
import treehouse.server.api.user.business.UserMapper;
1213
import treehouse.server.api.user.persistence.FcmTokenRepository;
14+
import treehouse.server.api.user.presentation.dto.UserResponseDTO;
1315
import treehouse.server.global.entity.User.FcmToken;
1416
import treehouse.server.global.entity.User.User;
1517
import treehouse.server.global.exception.GlobalErrorCode;
@@ -45,13 +47,30 @@ public void testFCMService(String fcmToken)
4547
}
4648
}
4749

50+
@Transactional(readOnly = false)
51+
public UserResponseDTO.saveFcmToken saveFcmToken(User user, FCMDto.saveFcmTokenDto request) {
52+
boolean isSuccess = false;
53+
logger.error("토큰 값 : {}",request.getFcmToken());
54+
if (fcmTokenRepository.existsByUserAndToken(user, request.getFcmToken())) {
55+
throw new FcmException(GlobalErrorCode.FCM_ALREADY_EXISTS_TOKEN);
56+
}else{
57+
fcmTokenRepository.save(FcmToken.builder()
58+
.user(user)
59+
.token(request.getFcmToken())
60+
.build()
61+
);
62+
isSuccess = true;
63+
}
64+
return UserMapper.toSaveFcmToken(user, isSuccess);
65+
}
66+
4867

4968
public void sendFcmMessage(User receiver, String title, String body) {
5069
if (receiver.isPushAgree() == false) {
5170
return;
5271
}
5372

54-
List<FcmToken> fcmTokenList = fcmTokenRepository.findAllByUserAndPushAllowed(receiver, true);
73+
List<FcmToken> fcmTokenList = fcmTokenRepository.findAllByUser(receiver);
5574
if (fcmTokenList.isEmpty()) {
5675
return;
5776
}

0 commit comments

Comments
 (0)