From 64dbf8bd28340f758cd25849736e7bb516c35587 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Mon, 6 Oct 2025 17:52:33 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=EC=95=8C=EB=A6=BC=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wellmeet/exception/ErrorCode.java | 3 +- .../template/NotificationTemplate.java | 11 ++++ .../template/NotificationTemplateData.java | 9 ++++ .../template/NotificationTemplateFactory.java | 25 ++++++++++ .../impl/ReservationCanceledTemplate.java | 35 +++++++++++++ .../impl/ReservationConfirmedTemplate.java | 35 +++++++++++++ .../impl/ReservationCreatedTemplate.java | 35 +++++++++++++ .../impl/ReservationReminderTemplate.java | 36 +++++++++++++ .../impl/ReservationUpdatedTemplate.java | 35 +++++++++++++ .../webpush/WebPushController.java | 9 ---- .../notification/webpush/WebPushService.java | 12 ----- .../webpush/sender/WebPushSender.java | 38 ++++---------- .../webpush/WebPushControllerTest.java | 50 ------------------- 13 files changed, 234 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/wellmeet/notification/template/NotificationTemplate.java create mode 100644 src/main/java/com/wellmeet/notification/template/NotificationTemplateData.java create mode 100644 src/main/java/com/wellmeet/notification/template/NotificationTemplateFactory.java create mode 100644 src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java create mode 100644 src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java create mode 100644 src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java create mode 100644 src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java create mode 100644 src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java diff --git a/src/main/java/com/wellmeet/exception/ErrorCode.java b/src/main/java/com/wellmeet/exception/ErrorCode.java index 9d27760..924fdca 100644 --- a/src/main/java/com/wellmeet/exception/ErrorCode.java +++ b/src/main/java/com/wellmeet/exception/ErrorCode.java @@ -16,7 +16,8 @@ public enum ErrorCode { INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 오류가 발생했습니다."), CORS_ORIGIN_EMPTY(HttpStatus.INTERNAL_SERVER_ERROR, "CORS Origin 은 적어도 한 개 있어야 합니다"), WEB_PUSH_SEND_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "웹 푸시 전송에 실패했습니다."), - SENDER_NOT_FOUND(HttpStatus.BAD_REQUEST, "알림을 발송할 수 없습니다."); + SENDER_NOT_FOUND(HttpStatus.BAD_REQUEST, "알림을 발송할 수 없습니다."), + TEMPLATE_NOT_FOUND(HttpStatus.INTERNAL_SERVER_ERROR, "알림 템플릿을 찾을 수 없습니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java b/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java new file mode 100644 index 0000000..e718560 --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java @@ -0,0 +1,11 @@ +package com.wellmeet.notification.template; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import java.util.Map; + +public interface NotificationTemplate { + + boolean supports(NotificationType type); + + NotificationTemplateData create(Map payload); +} diff --git a/src/main/java/com/wellmeet/notification/template/NotificationTemplateData.java b/src/main/java/com/wellmeet/notification/template/NotificationTemplateData.java new file mode 100644 index 0000000..8aa958b --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/NotificationTemplateData.java @@ -0,0 +1,9 @@ +package com.wellmeet.notification.template; + +public record NotificationTemplateData( + String title, + String body, + String url, + boolean requireInteraction +) { +} diff --git a/src/main/java/com/wellmeet/notification/template/NotificationTemplateFactory.java b/src/main/java/com/wellmeet/notification/template/NotificationTemplateFactory.java new file mode 100644 index 0000000..2d7ff17 --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/NotificationTemplateFactory.java @@ -0,0 +1,25 @@ +package com.wellmeet.notification.template; + +import com.wellmeet.exception.ErrorCode; +import com.wellmeet.exception.WellMeetNotificationException; +import com.wellmeet.notification.consumer.dto.NotificationType; +import java.util.List; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class NotificationTemplateFactory { + + private final List templates; + + public NotificationTemplateData createTemplateData(NotificationType type, Map payload) { + NotificationTemplate template = templates.stream() + .filter(low -> low.supports(type)) + .findFirst() + .orElseThrow(() -> new WellMeetNotificationException(ErrorCode.TEMPLATE_NOT_FOUND)); + + return template.create(payload); + } +} diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java new file mode 100644 index 0000000..5574f61 --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java @@ -0,0 +1,35 @@ +package com.wellmeet.notification.template.impl; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import com.wellmeet.notification.template.NotificationTemplate; +import com.wellmeet.notification.template.NotificationTemplateData; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReservationCanceledTemplate implements NotificationTemplate { + + @Override + public boolean supports(NotificationType type) { + return NotificationType.RESERVATION_CANCELED == type; + } + + @Override + public NotificationTemplateData create(Map payload) { + String restaurantName = getStringOrDefault(payload, "restaurantName", "식당"); + String reservationTime = getStringOrDefault(payload, "reservationTime", ""); + String reservationId = getStringOrDefault(payload, "reservationId", ""); + + String title = "예약이 취소되었습니다"; + String body = String.format("%s 예약이 취소되었습니다. 예약 시간: %s", + restaurantName, reservationTime); + String url = "/reservations/" + reservationId; + + return new NotificationTemplateData(title, body, url, false); + } + + private String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return value != null ? value.toString() : defaultValue; + } +} diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java new file mode 100644 index 0000000..1eae717 --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java @@ -0,0 +1,35 @@ +package com.wellmeet.notification.template.impl; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import com.wellmeet.notification.template.NotificationTemplate; +import com.wellmeet.notification.template.NotificationTemplateData; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReservationConfirmedTemplate implements NotificationTemplate { + + @Override + public boolean supports(NotificationType type) { + return NotificationType.RESERVATION_CONFIRMED == type; + } + + @Override + public NotificationTemplateData create(Map payload) { + String restaurantName = getStringOrDefault(payload, "restaurantName", "식당"); + String reservationTime = getStringOrDefault(payload, "reservationTime", ""); + String reservationId = getStringOrDefault(payload, "reservationId", ""); + + String title = "예약이 확정되었습니다"; + String body = String.format("%s 예약이 확정되었습니다. 예약 시간: %s", + restaurantName, reservationTime); + String url = "/reservations/" + reservationId; + + return new NotificationTemplateData(title, body, url, false); + } + + private String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return value != null ? value.toString() : defaultValue; + } +} diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java new file mode 100644 index 0000000..ab2fbed --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java @@ -0,0 +1,35 @@ +package com.wellmeet.notification.template.impl; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import com.wellmeet.notification.template.NotificationTemplate; +import com.wellmeet.notification.template.NotificationTemplateData; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReservationCreatedTemplate implements NotificationTemplate { + + @Override + public boolean supports(NotificationType type) { + return NotificationType.RESERVATION_CREATED == type; + } + + @Override + public NotificationTemplateData create(Map payload) { + String restaurantName = getStringOrDefault(payload, "restaurantName", "식당"); + String reservationTime = getStringOrDefault(payload, "reservationTime", ""); + String reservationId = getStringOrDefault(payload, "reservationId", ""); + + String title = "새로운 예약이 접수되었습니다"; + String body = String.format("%s에 새로운 예약이 접수되었습니다. 예약 시간: %s", + restaurantName, reservationTime); + String url = "/reservations/" + reservationId; + + return new NotificationTemplateData(title, body, url, true); + } + + private String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return value != null ? value.toString() : defaultValue; + } +} diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java new file mode 100644 index 0000000..e80189f --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java @@ -0,0 +1,36 @@ +package com.wellmeet.notification.template.impl; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import com.wellmeet.notification.template.NotificationTemplate; +import com.wellmeet.notification.template.NotificationTemplateData; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReservationReminderTemplate implements NotificationTemplate { + + @Override + public boolean supports(NotificationType type) { + return NotificationType.RESERVATION_REMINDER == type; + } + + @Override + public NotificationTemplateData create(Map payload) { + String restaurantName = getStringOrDefault(payload, "restaurantName", "식당"); + String reservationTime = getStringOrDefault(payload, "reservationTime", ""); + String reservationId = getStringOrDefault(payload, "reservationId", ""); + String minutesBefore = getStringOrDefault(payload, "minutesBefore", "30"); + + String title = "곧 예약 시간입니다"; + String body = String.format("%s 예약 시간이 %s분 남았습니다. 예약 시간: %s", + restaurantName, minutesBefore, reservationTime); + String url = "/reservations/" + reservationId; + + return new NotificationTemplateData(title, body, url, true); + } + + private String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return value != null ? value.toString() : defaultValue; + } +} diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java new file mode 100644 index 0000000..6f85045 --- /dev/null +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java @@ -0,0 +1,35 @@ +package com.wellmeet.notification.template.impl; + +import com.wellmeet.notification.consumer.dto.NotificationType; +import com.wellmeet.notification.template.NotificationTemplate; +import com.wellmeet.notification.template.NotificationTemplateData; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReservationUpdatedTemplate implements NotificationTemplate { + + @Override + public boolean supports(NotificationType type) { + return NotificationType.RESERVATION_UPDATED == type; + } + + @Override + public NotificationTemplateData create(Map payload) { + String restaurantName = getStringOrDefault(payload, "restaurantName", "식당"); + String reservationTime = getStringOrDefault(payload, "reservationTime", ""); + String reservationId = getStringOrDefault(payload, "reservationId", ""); + + String title = "예약 정보가 변경되었습니다"; + String body = String.format("%s 예약 정보가 변경되었습니다. 변경된 예약 시간: %s", + restaurantName, reservationTime); + String url = "/reservations/" + reservationId; + + return new NotificationTemplateData(title, body, url, false); + } + + private String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return value != null ? value.toString() : defaultValue; + } +} diff --git a/src/main/java/com/wellmeet/notification/webpush/WebPushController.java b/src/main/java/com/wellmeet/notification/webpush/WebPushController.java index e2678be..4aee2eb 100644 --- a/src/main/java/com/wellmeet/notification/webpush/WebPushController.java +++ b/src/main/java/com/wellmeet/notification/webpush/WebPushController.java @@ -2,7 +2,6 @@ import com.wellmeet.notification.webpush.dto.SubscribeRequest; import com.wellmeet.notification.webpush.dto.SubscribeResponse; -import com.wellmeet.notification.webpush.dto.TestPushRequest; import com.wellmeet.notification.webpush.dto.UnsubscribeRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -31,14 +30,6 @@ public SubscribeResponse subscribe( return webPushService.subscribe(userId, subscribeRequest); } - @PostMapping("/test-push") - public void testPush( - @Valid @RequestBody TestPushRequest testPushRequest, - @RequestParam String userId - ) { - webPushService.sendTestPush(userId, testPushRequest); - } - @DeleteMapping("/unsubscribe") @ResponseStatus(HttpStatus.NO_CONTENT) public void unsubscribe( diff --git a/src/main/java/com/wellmeet/notification/webpush/WebPushService.java b/src/main/java/com/wellmeet/notification/webpush/WebPushService.java index 1b405c6..781550d 100644 --- a/src/main/java/com/wellmeet/notification/webpush/WebPushService.java +++ b/src/main/java/com/wellmeet/notification/webpush/WebPushService.java @@ -5,10 +5,8 @@ import com.wellmeet.notification.webpush.domain.PushSubscription; import com.wellmeet.notification.webpush.dto.SubscribeRequest; import com.wellmeet.notification.webpush.dto.SubscribeResponse; -import com.wellmeet.notification.webpush.dto.TestPushRequest; import com.wellmeet.notification.webpush.dto.UnsubscribeRequest; import com.wellmeet.notification.webpush.repository.PushSubscriptionRepository; -import com.wellmeet.notification.webpush.sender.WebPushSender; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -20,7 +18,6 @@ public class WebPushService { private final PushSubscriptionRepository pushSubscriptionRepository; - private final WebPushSender webPushSender; @Transactional public SubscribeResponse subscribe(String userId, SubscribeRequest request) { @@ -40,15 +37,6 @@ public SubscribeResponse subscribe(String userId, SubscribeRequest request) { return new SubscribeResponse(savedSubscription); } - public void sendTestPush(String userId, TestPushRequest request) { - List subscriptions = pushSubscriptionRepository.findByUserId(userId); - if (subscriptions.isEmpty()) { - throw new WellMeetNotificationException(ErrorCode.SUBSCRIPTION_NOT_FOUND); - } - - subscriptions.forEach(subscription -> webPushSender.send(subscription, request)); - } - @Transactional public void unsubscribe(String userId, UnsubscribeRequest request) { if (!pushSubscriptionRepository.existsByUserIdAndEndpoint(userId, request.endpoint())) { diff --git a/src/main/java/com/wellmeet/notification/webpush/sender/WebPushSender.java b/src/main/java/com/wellmeet/notification/webpush/sender/WebPushSender.java index 4bd5665..1262dda 100644 --- a/src/main/java/com/wellmeet/notification/webpush/sender/WebPushSender.java +++ b/src/main/java/com/wellmeet/notification/webpush/sender/WebPushSender.java @@ -6,8 +6,9 @@ import com.wellmeet.notification.Sender; import com.wellmeet.notification.consumer.dto.NotificationMessage; import com.wellmeet.notification.domain.NotificationChannel; +import com.wellmeet.notification.template.NotificationTemplateData; +import com.wellmeet.notification.template.NotificationTemplateFactory; import com.wellmeet.notification.webpush.domain.PushSubscription; -import com.wellmeet.notification.webpush.dto.TestPushRequest; import com.wellmeet.notification.webpush.repository.PushSubscriptionRepository; import java.io.IOException; import java.security.GeneralSecurityException; @@ -29,6 +30,7 @@ public class WebPushSender implements Sender { private final PushSubscriptionRepository pushSubscriptionRepository; private final PushService pushService; + private final NotificationTemplateFactory templateFactory; private final ObjectMapper objectMapper = new ObjectMapper(); @Override @@ -53,39 +55,21 @@ public void send(NotificationMessage message) { } private Map getNotificationPayload(NotificationMessage message) { - Map notificationPayload = new HashMap<>(); - notificationPayload.put("title", "WellMeet 알림"); - notificationPayload.put("body", message.getPayload()); - notificationPayload.put("icon", "/icon-192x192.png"); - notificationPayload.put("badge", "/badge-72x72.png"); - notificationPayload.put("vibrate", new int[]{100, 50, 100}); - notificationPayload.put("requireInteraction", false); - - Map defaultData = new HashMap<>(); - defaultData.put("url", "/notifications"); - defaultData.put("timestamp", System.currentTimeMillis()); - notificationPayload.put("data", defaultData); - return notificationPayload; - } - - public void send(PushSubscription subscription, TestPushRequest request) { - Keys keys = new Keys(subscription.getP256dh(), subscription.getAuth()); - Subscription sub = new Subscription(subscription.getEndpoint(), keys); - Map notificationPayload = getNotificationPayload(request); - webPushSend(notificationPayload, sub); - } + NotificationTemplateData templateData = templateFactory.createTemplateData( + message.getNotification().getType(), + message.getPayload() + ); - private Map getNotificationPayload(TestPushRequest request) { Map notificationPayload = new HashMap<>(); - notificationPayload.put("title", request.title()); - notificationPayload.put("body", request.body()); + notificationPayload.put("title", templateData.title()); + notificationPayload.put("body", templateData.body()); notificationPayload.put("icon", "/icon-192x192.png"); notificationPayload.put("badge", "/badge-72x72.png"); notificationPayload.put("vibrate", new int[]{100, 50, 100}); - notificationPayload.put("requireInteraction", false); + notificationPayload.put("requireInteraction", templateData.requireInteraction()); Map defaultData = new HashMap<>(); - defaultData.put("url", "/notifications"); + defaultData.put("url", templateData.url()); defaultData.put("timestamp", System.currentTimeMillis()); notificationPayload.put("data", defaultData); return notificationPayload; diff --git a/src/test/java/com/wellmeet/webpush/WebPushControllerTest.java b/src/test/java/com/wellmeet/webpush/WebPushControllerTest.java index 69fbfef..2e20f40 100644 --- a/src/test/java/com/wellmeet/webpush/WebPushControllerTest.java +++ b/src/test/java/com/wellmeet/webpush/WebPushControllerTest.java @@ -8,10 +8,8 @@ import com.wellmeet.notification.webpush.domain.PushSubscription; import com.wellmeet.notification.webpush.dto.SubscribeRequest; import com.wellmeet.notification.webpush.dto.SubscribeResponse; -import com.wellmeet.notification.webpush.dto.TestPushRequest; import com.wellmeet.notification.webpush.dto.UnsubscribeRequest; import io.restassured.http.ContentType; -import java.util.Map; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -82,54 +80,6 @@ class Subscribe { } } - @Nested - class TestPush { - - @ParameterizedTest - @NullAndEmptyAndBlankSource - void title은_개행글자_외_다른_글자가_포함되야_한다(String title) { - String userId = "1"; - String body = "Test Body"; - Map data = Map.of("key", "value"); - - given() - .contentType(ContentType.JSON) - .queryParam("userId", userId) - .body(new TestPushRequest(title, body, data)) - .when().post("/notification/test-push") - .then().statusCode(HttpStatus.BAD_REQUEST.value()); - } - - @ParameterizedTest - @NullAndEmptyAndBlankSource - void body는_개행글자_외_다른_글자가_포함되야_한다(String body) { - String userId = "1"; - String title = "Test Title"; - Map data = Map.of("key", "value"); - - given() - .contentType(ContentType.JSON) - .queryParam("userId", userId) - .body(new TestPushRequest(title, body, data)) - .when().post("/notification/test-push") - .then().statusCode(HttpStatus.BAD_REQUEST.value()); - } - - @Test - void data는_null이_아니어야_한다() { - String userId = "1"; - String title = "Test Title"; - String body = "Test Body"; - - given() - .contentType(ContentType.JSON) - .queryParam("userId", userId) - .body(new TestPushRequest(title, body, null)) - .when().post("/notification/test-push") - .then().statusCode(HttpStatus.BAD_REQUEST.value()); - } - } - @Nested class Unsubscribe { From 6ed29dc0f46ae701c3a521b98f8213dc51e73c2d Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Wed, 8 Oct 2025 13:28:53 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/template/NotificationTemplate.java | 6 ++++++ .../template/impl/ReservationCanceledTemplate.java | 5 ----- .../template/impl/ReservationConfirmedTemplate.java | 5 ----- .../template/impl/ReservationCreatedTemplate.java | 5 ----- .../template/impl/ReservationReminderTemplate.java | 5 ----- .../template/impl/ReservationUpdatedTemplate.java | 5 ----- 6 files changed, 6 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java b/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java index e718560..9c04a47 100644 --- a/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/NotificationTemplate.java @@ -2,10 +2,16 @@ import com.wellmeet.notification.consumer.dto.NotificationType; import java.util.Map; +import java.util.Objects; public interface NotificationTemplate { boolean supports(NotificationType type); NotificationTemplateData create(Map payload); + + default String getStringOrDefault(Map payload, String key, String defaultValue) { + Object value = payload.get(key); + return Objects.toString(value, defaultValue); + } } diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java index 5574f61..396562d 100644 --- a/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationCanceledTemplate.java @@ -27,9 +27,4 @@ public NotificationTemplateData create(Map payload) { return new NotificationTemplateData(title, body, url, false); } - - private String getStringOrDefault(Map payload, String key, String defaultValue) { - Object value = payload.get(key); - return value != null ? value.toString() : defaultValue; - } } diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java index 1eae717..09d2746 100644 --- a/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationConfirmedTemplate.java @@ -27,9 +27,4 @@ public NotificationTemplateData create(Map payload) { return new NotificationTemplateData(title, body, url, false); } - - private String getStringOrDefault(Map payload, String key, String defaultValue) { - Object value = payload.get(key); - return value != null ? value.toString() : defaultValue; - } } diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java index ab2fbed..a36c358 100644 --- a/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationCreatedTemplate.java @@ -27,9 +27,4 @@ public NotificationTemplateData create(Map payload) { return new NotificationTemplateData(title, body, url, true); } - - private String getStringOrDefault(Map payload, String key, String defaultValue) { - Object value = payload.get(key); - return value != null ? value.toString() : defaultValue; - } } diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java index e80189f..b26657f 100644 --- a/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationReminderTemplate.java @@ -28,9 +28,4 @@ public NotificationTemplateData create(Map payload) { return new NotificationTemplateData(title, body, url, true); } - - private String getStringOrDefault(Map payload, String key, String defaultValue) { - Object value = payload.get(key); - return value != null ? value.toString() : defaultValue; - } } diff --git a/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java b/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java index 6f85045..ebf0550 100644 --- a/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java +++ b/src/main/java/com/wellmeet/notification/template/impl/ReservationUpdatedTemplate.java @@ -27,9 +27,4 @@ public NotificationTemplateData create(Map payload) { return new NotificationTemplateData(title, body, url, false); } - - private String getStringOrDefault(Map payload, String key, String defaultValue) { - Object value = payload.get(key); - return value != null ? value.toString() : defaultValue; - } }