Skip to content

Commit

Permalink
Merge pull request #34 from VOM-Project/feature/fcm
Browse files Browse the repository at this point in the history
feat: Add Webpush API
  • Loading branch information
okodeee authored Jun 10, 2024
2 parents eda53f1 + edca701 commit 63eb7b1
Show file tree
Hide file tree
Showing 13 changed files with 263 additions and 135 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,23 @@ jobs:
oauth2.google.token-uri: ${{ secrets.TOKEN_URI }}
oauth2.google.resource-uri: ${{ secrets.RESOURCE_URI }}
jwt.secret: ${{ secrets.JWT_SECRET }}
# 2-2) Create Firebase Admin SDK JSON file
- name: Create Firebase Admin SDK JSON file
env:
FIREBASE_ADMIN_SDK: ${{ secrets.FIREBASE_ADMIN_SDK }}
FIREBASE_CONFIG_PATH: /firebase/vomvom-fd09b-firebase-adminsdk-ghtjs-0070b39a4e.json
run: |
mkdir -p firebase
echo "$FIREBASE_ADMIN_SDK" > firebase/vomvom-fd09b-firebase-adminsdk-ghtjs-0070b39a4e.json
# 3) gradlew 권한 설정
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# working-directory: ${{ env.working-directory }}
# 4) test 제외 gradle 빌드
- name: Build with Gradle
run: ./gradlew clean build -x test
env:
FIREBASE_CONFIG_PATH: firebase/vomvom-fd09b-firebase-adminsdk-ghtjs-0070b39a4e.json
# working-directory: ${{ env.working-directory }}
# 5) AWS 인증
- name: Configure AWS credentials
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/vom/spring/domain/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.*;
import vom.spring.domain.homepy.Homepy;
import vom.spring.domain.touchpoint.Touchpoint;
import vom.spring.domain.webpush.domain.Fcm;

import java.time.LocalDate;
import java.util.ArrayList;
Expand Down Expand Up @@ -39,6 +40,9 @@ public class Member {
@OneToOne(mappedBy = "member", fetch = LAZY)
private Homepy homepy;

@OneToOne(mappedBy = "member", fetch = LAZY)
private Fcm fcm;


public void updateNicknameAndEmailAndProfileImg(String nickname, String email, String profileImgUrl) {
this.nickname = nickname;
Expand Down
37 changes: 0 additions & 37 deletions src/main/java/vom/spring/domain/webpush/FcmController.java

This file was deleted.

12 changes: 0 additions & 12 deletions src/main/java/vom/spring/domain/webpush/FcmService.java

This file was deleted.

82 changes: 0 additions & 82 deletions src/main/java/vom/spring/domain/webpush/FcmServiceImpl.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package vom.spring.domain.webpush.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import vom.spring.domain.webpush.dto.ApiResponseWrapper;
import vom.spring.domain.webpush.service.FcmService;
import vom.spring.domain.webpush.domain.SuccessCode;

import java.io.IOException;

@Slf4j
@Controller
public class FcmController {
private FcmService fcmService;
@Autowired
public FcmController(FcmService fcmService) {
this.fcmService = fcmService;
}

@PostMapping(value = "/api/fcm/{member-id}")
public ResponseEntity<HttpStatus> setFcmToken(
@PathVariable("member-id") Long member_id,
@RequestParam String fcmToken
) {
fcmService.setFcmToken(fcmToken, member_id);
return new ResponseEntity<>(HttpStatus.OK);
}

// 웹 푸시 서비스 테스트용
@PostMapping("/api/v2/fcm/send/{member_id}")
public ResponseEntity<ApiResponseWrapper<Object>> pushMessage(
@PathVariable("member_id") Long memberId
) throws IOException {
log.debug("[+] 푸시 메시지를 전송합니다. ");

int result = fcmService.sendMessageTo(memberId);

ApiResponseWrapper<Object> arw = ApiResponseWrapper
.builder()
.result(result)
.resultCode(SuccessCode.SELECT_SUCCESS.getStatus())
.resultMsg(SuccessCode.SELECT_SUCCESS.getMessage())
.build();

return new ResponseEntity<>(arw, HttpStatus.OK);
}
}
32 changes: 32 additions & 0 deletions src/main/java/vom/spring/domain/webpush/domain/Fcm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package vom.spring.domain.webpush.domain;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import vom.spring.domain.member.domain.Member;

import java.time.LocalDateTime;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Fcm {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private LocalDateTime createdAt;

@Column(nullable = false)
private String fcmToken;

@OneToOne
@JoinColumn(referencedColumnName = "id", name = "member_id", nullable = false)
private Member member;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vom.spring.domain.webpush;
package vom.spring.domain.webpush.domain;

public enum SuccessCode {
SELECT_SUCCESS(200, "데이터 조회 성공"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vom.spring.domain.webpush;
package vom.spring.domain.webpush.dto;

import lombok.Getter;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vom.spring.domain.webpush;
package vom.spring.domain.webpush.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vom.spring.domain.webpush;
package vom.spring.domain.webpush.dto;

import lombok.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package vom.spring.domain.webpush.repository;

import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import vom.spring.domain.webpush.domain.Fcm;

@Repository
public class FcmRepository {

@PersistenceContext
private EntityManager em;

public void save(Fcm fcm) {
em.persist(fcm);
}

public Fcm findByMember_id(Long member_id) {
try {
return em.createQuery("SELECT f FROM Fcm f WHERE f.member.id = :member_id", Fcm.class)
.setParameter("member_id", member_id)
.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
}
Loading

0 comments on commit 63eb7b1

Please sign in to comment.