From 110e76a1b8a42f3b2292c99857fa3152c47afc7a Mon Sep 17 00:00:00 2001 From: mingeun0507 Date: Wed, 21 Feb 2024 17:55:30 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20Firebase=20=ED=82=A4=20gitignore?= =?UTF-8?q?=EC=97=90=20=EC=B6=94=EA=B0=80=20(#130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 3a35492..bc5e504 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ application-dev.yml application-prod.yml application-jwt.yml application-secret.yml + +### Secret files ### +**/main/resources/**/*.json From fed24b0050fd2e7ab45dc3cdc918eba7f982e3a4 Mon Sep 17 00:00:00 2001 From: mingeun0507 Date: Wed, 21 Feb 2024 18:16:35 +0900 Subject: [PATCH 2/5] =?UTF-8?q?build:=20Firebase=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index fa7a743..e928876 100644 --- a/build.gradle +++ b/build.gradle @@ -79,6 +79,9 @@ dependencies { runtimeOnly 'com.mysql:mysql-connector-j' implementation "org.springframework.boot:spring-boot-starter-data-mongodb" + // Firebase + implementation 'com.google.firebase:firebase-admin:9.2.0' + // Test testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' From 0453d56c4469e113a31308d786a93c9dbe0c693e Mon Sep 17 00:00:00 2001 From: mingeun0507 Date: Wed, 21 Feb 2024 18:16:44 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20Firebase=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EC=99=84=EB=A3=8C=20(#130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/firebase/FirebaseConfig.java | 41 +++++++++++++++++++ .../madii/common/exception/ErrorDetails.java | 2 + 2 files changed, 43 insertions(+) create mode 100644 src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java diff --git a/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java b/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java new file mode 100644 index 0000000..884f785 --- /dev/null +++ b/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java @@ -0,0 +1,41 @@ +package com.guttery.madii.common.config.firebase; + +import com.google.auth.oauth2.GoogleCredentials; +import com.google.firebase.FirebaseApp; +import com.google.firebase.FirebaseOptions; +import com.guttery.madii.common.exception.CustomException; +import com.guttery.madii.common.exception.ErrorDetails; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +import java.io.FileInputStream; +import java.io.InputStream; + +@Configuration +public class FirebaseConfig { + @Value("${firebase.config}") + private String firebaseKeyFilePath; + @Value("${firebase.project-id}") + private String firebaseProjectId; + + @PostConstruct + public void initialize() { + try ( + final InputStream serviceAccount = new FileInputStream(firebaseKeyFilePath) + ) { + final FirebaseOptions options = FirebaseOptions.builder() + .setCredentials(GoogleCredentials.fromStream(serviceAccount)) + .setProjectId(firebaseProjectId) + .build(); + + + if (FirebaseApp.getApps().isEmpty()) { + FirebaseApp.initializeApp(options); + } + } catch (final Exception e) { + e.printStackTrace(); + throw CustomException.of(ErrorDetails.FIREBASE_INTEGRATION_FAILED); + } + } +} diff --git a/src/main/java/com/guttery/madii/common/exception/ErrorDetails.java b/src/main/java/com/guttery/madii/common/exception/ErrorDetails.java index d435732..7b21a2e 100644 --- a/src/main/java/com/guttery/madii/common/exception/ErrorDetails.java +++ b/src/main/java/com/guttery/madii/common/exception/ErrorDetails.java @@ -63,6 +63,8 @@ public enum ErrorDetails { FILE_UPLOAD_FAILED("F001", HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 업로드에 실패했습니다."), + FIREBASE_INTEGRATION_FAILED("FI001", HttpStatus.INTERNAL_SERVER_ERROR.value(), "Firebase 연동 중 오류가 발생했습니다. 다시 시도해 주세요."), + ; private final String code; From b3108575a1aa852d77441d00c9b4cdf69b7aaa00 Mon Sep 17 00:00:00 2001 From: mingeun0507 Date: Wed, 21 Feb 2024 19:07:48 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20Firebase=20=ED=81=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EC=96=B8=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/firebase/FirebaseConfig.java | 1 - .../domain/service/NotificationClient.java | 4 ++++ .../FirebaseNotificationClient.java | 24 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/guttery/madii/domain/notification/domain/service/NotificationClient.java create mode 100644 src/main/java/com/guttery/madii/domain/notification/infrastructure/FirebaseNotificationClient.java diff --git a/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java b/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java index 884f785..6c2a76e 100644 --- a/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java +++ b/src/main/java/com/guttery/madii/common/config/firebase/FirebaseConfig.java @@ -34,7 +34,6 @@ public void initialize() { FirebaseApp.initializeApp(options); } } catch (final Exception e) { - e.printStackTrace(); throw CustomException.of(ErrorDetails.FIREBASE_INTEGRATION_FAILED); } } diff --git a/src/main/java/com/guttery/madii/domain/notification/domain/service/NotificationClient.java b/src/main/java/com/guttery/madii/domain/notification/domain/service/NotificationClient.java new file mode 100644 index 0000000..f1433ea --- /dev/null +++ b/src/main/java/com/guttery/madii/domain/notification/domain/service/NotificationClient.java @@ -0,0 +1,4 @@ +package com.guttery.madii.domain.notification.domain.service; + +public interface NotificationClient { +} diff --git a/src/main/java/com/guttery/madii/domain/notification/infrastructure/FirebaseNotificationClient.java b/src/main/java/com/guttery/madii/domain/notification/infrastructure/FirebaseNotificationClient.java new file mode 100644 index 0000000..147a799 --- /dev/null +++ b/src/main/java/com/guttery/madii/domain/notification/infrastructure/FirebaseNotificationClient.java @@ -0,0 +1,24 @@ +package com.guttery.madii.domain.notification.infrastructure; + +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.FirebaseMessagingException; +import com.google.firebase.messaging.Message; +import com.guttery.madii.domain.notification.domain.service.NotificationClient; +import org.springframework.stereotype.Component; + +@Component +public class FirebaseNotificationClient implements NotificationClient { + public String sendNotification(String content, String token) { + try { + final Message message = Message.builder() + .setToken(token) + .putData("title", content) + .build(); + + return FirebaseMessaging.getInstance().send(message); + + } catch (FirebaseMessagingException e) { + return "Failed"; + } + } +} From be03f09f23e8a19d714f827d2f72346939c3604b Mon Sep 17 00:00:00 2001 From: mingeun0507 Date: Wed, 21 Feb 2024 19:25:47 +0900 Subject: [PATCH 5/5] =?UTF-8?q?ci:=20gradle=20=EC=A0=84=EC=97=90=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=B4=EC=96=B4=EB=B2=A0=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d46c5b6..8424533 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,6 +41,10 @@ jobs: run: echo ${{ secrets.APPLICATION_PROD_BASE64 }} | base64 --decode > ./src/main/resources/application-prod.yml shell: bash + - name: make madii-app-firebase-adminsdk-uriyk-c04677456f.json + run: echo ${{ secrets.FIREBASE_KEY_BASE64 }} | base64 --decode > ./src/main/resources/madii-app-firebase-adminsdk-uriyk-c04677456f.json + shell: bash + - name: Gradle Caching uses: actions/cache@v3 with: