Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Commit

Permalink
refactor: 🚀 fcmtoken 등록 api 분리 (#69)
Browse files Browse the repository at this point in the history
* Initial commit

* Feat/#1 oauth2login (#3)

* feat: User 엔터티 생성

* feat: jwt 버전 11->12, JWTUtil 생성

* feat: JWTFilter(JwtAuthenticationFilter) 등록

* feat: kakao 로그인 구현

* docs: swagger 태그(Authorization) 추가 (#5)

* feat: User 엔터티 생성

* feat: jwt 버전 11->12, JWTUtil 생성

* feat: JWTFilter(JwtAuthenticationFilter) 등록

* feat: kakao 로그인 구현

* docs: swagger 태그(Authorization) 추가

* feat: accesstoken 테스트를 위한 test login 생성 (#9)

* feat: User 엔티티에 상속 (#12)

* feat: BaseEntity 생성

* feat: User 엔티티에 상속

* feat: 일기 생성 기능 구현 (#14)

* feat: accesstoken 테스트를 위한 test login 생성

* feat: 일기 생성 기능 구현

* hotfix: ci 에러 수정 (#16)

* feat: accesstoken 테스트를 위한 test login 생성

* feat: 일기 생성 기능 구현

* hotfix: ci 에러 수정

* fix: OIDC 카카오 로그인 nullPointerException 해결

* feat: 닉네임 설정 기능 구현 (#21)

* feat: 일기 수정 기능 구현 (#25)

* feat: 일기에 감정 컬럼 추가

* feat: 일기 수정 기능 구현

* feat: 일기 삭제 기능 구현 (#27)

* feat: 일기에 감정 컬럼 추가

* feat: 일기 수정 기능 구현

* feat: 일기 삭제 기능 구현

* feat: 일기 감정 분석 기능 구현 (#31)

* feat: 감정 저장 기능 구현 (#33)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정 (#35)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정

* hotfix: 🚑 서버 꺼짐 현상 해결 (#37)

* feat: 일기 감정 분석 기능 구현

* feat: 감정 저장 기능 구현

* fix: 🐛 감정 저장 안되던 오류 수정

* hotfix: 🚑 서버 꺼짐 현상 해결

* feat: ✨ 홈 화면 조회 기능 구현 (#41)

* feat: ✨ 회원가입 완료 여부 필드 추가 (#44)

* feat: ✨ 일기 상세 조회 구현 (#47)

* feat: ✨ 기간 별 감정 통계 조회 기능 구현 (#50)

* feat: ✨ 일기 내용 검색 기능 구현 (#52)

* feat: ✨ 감정 별 일기 조회 (#54)

* feat: ✨ 월 별 일기 조회 기능 구현 (#59)

* ci: ⚡ workflow 수정 (#61)

* ci: ⚡ workflow 수정

* ci: ⚡ workflow 수정

* feat: ✨ user 엔터티 fcmToken 컬럼 추가, 로그인 시 토큰 최신화 구현 (#63)

* ci: ⚡ workflow 수정

* ci: ⚡ workflow 수정

* feat: ✨ fcm 토큰 알림 기능 구현

* feat: ✨ user 엔터티 fcmToken 컬럼 추가, 로그인 시 토큰 최신화 구현

* feat: ✨ 북마크 추가/삭제 기능 구현, 일기/홈화면 조회 쿼리문 수정 (#65)

* feat: ✨ 북마크 추가 기능 구현

* feat: ✨ 북마크 추가/삭제 기능 구현, 일기/홈화면 조회 쿼리문 수정

* feat: 🚀 fcmtoken 등록 api 분리 (#68)
  • Loading branch information
LEEJaeHyeok97 authored Aug 1, 2024
1 parent b10ee6a commit 962b1cc
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 3 deletions.
3 changes: 1 addition & 2 deletions src/main/java/com/aidiary/domain/auth/dto/IdTokenReq.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
@Builder
public record IdTokenReq(
String idToken,
String provider,
String fcmToken
String provider
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ public ResponseCustom<AuthRes> login(@RequestBody IdTokenReq idTokenReq) {
User user = userRepository.findByProviderId(providerId)
.orElseThrow(EntityNotFoundException::new);

authService.updateFcmToken(user.getId(), idTokenReq.fcmToken());

AuthRes authRes = AuthRes.builder()
.accessToken(accessToken)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.aidiary.domain.notification.application;

import com.aidiary.domain.notification.dto.FcmMessage;
import com.aidiary.domain.notification.dto.FcmTokenReq;
import com.aidiary.domain.user.domain.User;
import com.aidiary.domain.user.domain.repository.UserRepository;
import com.aidiary.global.config.security.token.UserPrincipal;
import com.aidiary.global.payload.Message;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.auth.oauth2.GoogleCredentials;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import okhttp3.*;
import org.springframework.core.io.ClassPathResource;
Expand All @@ -24,6 +30,8 @@ public class FcmService {
"nabi-ffce7/messages:send";
private final ObjectMapper objectMapper;

private final UserRepository userRepository;

@Transactional
public void sendMessageTo(String targetToken, String title, String body) throws IOException {
String message = makeMessage(targetToken, title, body);
Expand Down Expand Up @@ -68,4 +76,23 @@ private String getAccessToken() throws IOException {
return googleCredentials.getAccessToken().getTokenValue();
}

@Transactional
public synchronized Message register(UserPrincipal userPrincipal, FcmTokenReq fcmTokenReq) {
User user = userRepository.findById(userPrincipal.getId())
.orElseThrow(EntityNotFoundException::new);

if (fcmTokenReq.fcmToken().isEmpty()) {
return Message
.builder()
.message("fcmToken이 비어 있습니다.")
.build();
}

user.updateFcmToken(fcmTokenReq.fcmToken());

return Message
.builder()
.message("fcmToken이 등록되었습니다.")
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.aidiary.domain.notification.dto;

import lombok.Builder;

@Builder
public record FcmTokenReq(
String fcmToken
) {
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
package com.aidiary.domain.notification.presentation;

import com.aidiary.domain.auth.dto.AuthRes;
import com.aidiary.domain.notification.application.FcmService;
import com.aidiary.domain.notification.dto.FcmReq;
import com.aidiary.domain.notification.dto.FcmTokenReq;
import com.aidiary.global.config.security.token.CurrentUser;
import com.aidiary.global.config.security.token.UserPrincipal;
import com.aidiary.global.payload.ErrorResponse;
import com.aidiary.global.payload.Message;
import com.aidiary.global.payload.ResponseCustom;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand All @@ -11,6 +25,7 @@

import java.io.IOException;

@Tag(name = "Notification",description = "Notification API")
@RestController
@RequiredArgsConstructor
@RequestMapping("/fcm")
Expand All @@ -19,6 +34,19 @@ public class NotificationController {
private final FcmService fcmService;


@Operation(summary = "Fcmtoken 저장", description = "해당 유저의 Fcmtoken을 저장합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Fcmtoken 저장 성공", content = {@Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = Message.class)))}),
@ApiResponse(responseCode = "400", description = "Fcmtoken 저장 실패", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))}),
})
@PostMapping("/register")
public ResponseCustom<Message> registerFcmToken(
@Parameter(description = "Accesstoken을 입력해주세요.", required = true) @CurrentUser UserPrincipal userPrincipal,
@Parameter(description = "Fcmtoken을 입력해주세요.", required = true) @RequestBody FcmTokenReq fcmTokenReq) {
return ResponseCustom.OK(fcmService.register(userPrincipal, fcmTokenReq));
}

@Operation(summary = "Test용 알람", description = "이 API는 Test용으로 서버측 에서만 현재 컨트롤 할 수 있습니다.")
@PostMapping
public ResponseCustom<?> pushMessage(@RequestBody FcmReq fcmReq) throws IOException {
System.out.println(fcmReq.targetToken() + " "
Expand Down

0 comments on commit 962b1cc

Please sign in to comment.