Skip to content

Commit

Permalink
feat: fcm 토큰 등록 api 추가 (#312) (#314)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sangwook02 authored Jan 2, 2024
1 parent c9000c6 commit 2f50fdb
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import com.newfit.reservation.domains.authority.domain.Authority;
import com.newfit.reservation.domains.authority.repository.AuthorityRepository;
import com.newfit.reservation.domains.fcm.dto.NotificationRequest;
import com.newfit.reservation.domains.fcm.dto.request.NotificationRequest;
import com.newfit.reservation.domains.fcm.service.FCMService;
import com.newfit.reservation.domains.reservation.domain.Reservation;
import com.newfit.reservation.domains.reservation.repository.ReservationRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.newfit.reservation.domains.fcm.controller;

import static org.springframework.http.HttpStatus.*;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.newfit.reservation.domains.fcm.dto.request.FCMRegistrationRequest;
import com.newfit.reservation.domains.fcm.service.FCMService;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/api/v1/fcm")
@RequiredArgsConstructor
public class FCMApiController {

private final FCMService fcmService;

@PostMapping
public ResponseEntity<Void> fcmTokenRegistration(
@RequestHeader(value = "user-id") Long userId,
@Valid @RequestBody FCMRegistrationRequest request) {
fcmService.registerFCMToken(userId, request);
return ResponseEntity
.status(CREATED)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@ public class FCMToken {
@Column(name = "fcm_token")
private String fcmToken;

@Builder
@Builder(access = AccessLevel.PRIVATE)
private FCMToken(User user, String fcmToken) {
this.user = user;
this.fcmToken = fcmToken;
}

public static FCMToken createFCMToken(User user, String fcmToken) {
return FCMToken.builder()
.user(user)
.fcmToken(fcmToken)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.newfit.reservation.domains.fcm.dto.request;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

import jakarta.validation.constraints.NotEmpty;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class FCMRegistrationRequest {

@NotEmpty
private String fcmToken;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.newfit.reservation.domains.fcm.dto;
package com.newfit.reservation.domains.fcm.dto.request;

import com.newfit.reservation.domains.reservation.domain.Reservation;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.newfit.reservation.domains.fcm.dto;
package com.newfit.reservation.domains.fcm.dto.response;

public class NotificationResponse {
private int status;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package com.newfit.reservation.domains.fcm.service;

import static com.newfit.reservation.common.exception.ErrorCodeType.*;

import org.springframework.stereotype.Service;

import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;
import com.newfit.reservation.domains.fcm.dto.NotificationRequest;
import com.newfit.reservation.common.exception.CustomException;
import com.newfit.reservation.domains.fcm.domain.FCMToken;
import com.newfit.reservation.domains.fcm.dto.request.FCMRegistrationRequest;
import com.newfit.reservation.domains.fcm.dto.request.NotificationRequest;
import com.newfit.reservation.domains.fcm.repository.FCMRepository;
import com.newfit.reservation.domains.user.domain.User;
import com.newfit.reservation.domains.user.repository.UserRepository;

Expand All @@ -19,6 +25,15 @@
public class FCMService {
private final FirebaseMessaging firebaseMessaging;
private final UserRepository userRepository;
private final FCMRepository fcmRepository;

public void registerFCMToken(Long userId, FCMRegistrationRequest request) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
FCMToken fcmToken = FCMToken.createFCMToken(user, request.getFcmToken());

fcmRepository.save(fcmToken);
}

public void sendMessageByToken(NotificationRequest request) {
User user = userRepository.findById(request.getUserId()).orElseThrow(IllegalArgumentException::new);
Expand Down

0 comments on commit 2f50fdb

Please sign in to comment.