Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.fontory.fontorybe.font;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.fontory.fontorybe.font.domain.Font;
import org.fontory.fontorybe.sms.application.port.PhoneNumberStorage;
import org.fontory.fontorybe.sms.application.port.SmsService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;

@Slf4j
@Component
@RequiredArgsConstructor
public class CoolSmsEventListener {

private final PhoneNumberStorage phoneNumberStorage;
private final SmsService smsService;

@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void sendFontCreateRequestNotificationAndSavePhoneNumber(FontCreateRequestNotificationEvent e) {
Font font = e.getFont();
String phoneNumber = e.getPhoneNumber();

log.info("sms send start & save phone number in redis - fontId={}, phoneNumber={}", font.getId(), phoneNumber);

phoneNumberStorage.savePhoneNumber(font, phoneNumber);
smsService.sendFontCreateRequestNotification(phoneNumber, font.getName());

log.info("sms sent & phone number saved in redis - fontId={}, phoneNumber={}", font.getId(), phoneNumber);
}

@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void sendFontCreateCompleteNotificationAndRemovePhoneNumber(FontCreateCompleteNotificationEvent e) {
Font font = e.getFont();
String phoneNumber = phoneNumberStorage.getPhoneNumber(font);

log.info("sms send start & save phone number in redis - fontId={}, phoneNumber={}", font.getId(), phoneNumber);

smsService.sendFontCreateCompleteNotification(phoneNumber, font.getName());
phoneNumberStorage.removePhoneNumber(font);

log.info("sms sent & phone number saved in redis - fontId={}, phoneNumber={}", font.getId(), phoneNumber);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.fontory.fontorybe.font;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.fontory.fontorybe.font.domain.Font;

@Getter
@RequiredArgsConstructor
public class FontCreateCompleteNotificationEvent {
private final Font font;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.fontory.fontorybe.font;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.fontory.fontorybe.font.domain.Font;

@Getter
@RequiredArgsConstructor
public class FontCreateRequestNotificationEvent {
private final Font font;
private final String phoneNumber;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.fontory.fontorybe.file.application.port.FileService;
import org.fontory.fontorybe.file.domain.FileMetadata;
import org.fontory.fontorybe.file.domain.FileUploadResult;
import org.fontory.fontorybe.font.FontCreateCompleteNotificationEvent;
import org.fontory.fontorybe.font.FontCreateRequestNotificationEvent;
import org.fontory.fontorybe.font.controller.dto.FontCreateDTO;
import org.fontory.fontorybe.font.controller.dto.FontDeleteResponse;
import org.fontory.fontorybe.font.controller.dto.FontDownloadResponse;
Expand All @@ -33,6 +35,7 @@
import org.fontory.fontorybe.member.domain.Member;
import org.fontory.fontorybe.sms.application.port.PhoneNumberStorage;
import org.fontory.fontorybe.sms.application.port.SmsService;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
Expand All @@ -51,8 +54,7 @@ public class FontServiceImpl implements FontService {
private final FontRequestProducer fontRequestProducer;
private final CloudStorageService cloudStorageService;
private final BadWordFiltering badWordFiltering;
private final SmsService smsService;
private final PhoneNumberStorage phoneNumberStorage;
private final ApplicationEventPublisher eventPublisher;

@Override
@Transactional
Expand All @@ -73,8 +75,8 @@ public Font create(Long memberId, FontCreateDTO fontCreateDTO, FileUploadResult
fontRequestProducer.sendFontRequest(FontRequestProduceDto.from(savedFont, member, fontPaperUrl));

if (fontCreateDTO.getPhoneNumber() != null && !fontCreateDTO.getPhoneNumber().isBlank()) {
phoneNumberStorage.savePhoneNumber(savedFont, fontCreateDTO.getPhoneNumber());
smsService.sendFontCreationNotification(fontCreateDTO.getPhoneNumber(), fontCreateDTO.getName());
String notificationPhoneNumber = fontCreateDTO.getPhoneNumber();
eventPublisher.publishEvent(new FontCreateRequestNotificationEvent(savedFont, notificationPhoneNumber));
}

log.info("Service completed: Font created with ID: {} and Font template image uploaded successfully", savedFont.getId());
Expand Down Expand Up @@ -302,12 +304,7 @@ public FontUpdateResponse updateProgress(Long fontId, FontProgressUpdateDTO font
String woff2Url = cloudStorageService.getWoff2Url(updatedFont.getKey());

if (fontProgressUpdateDTO.getStatus() == FontStatus.DONE) {
String phoneNumber = phoneNumberStorage.getPhoneNumber(targetFont);

if (phoneNumber != null && !phoneNumber.isBlank()) {
smsService.sendFontProgressNotification(phoneNumber, updatedFont.getName());
phoneNumberStorage.removePhoneNumber(targetFont);
}
eventPublisher.publishEvent(new FontCreateCompleteNotificationEvent(updatedFont));
}

log.info("Service completed: Font ID: {} updated successfully", fontId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,33 @@
public class SmsServiceImpl implements SmsService {

@Value("${coolsms.phone-number}")
private String phoneNumber;
private String fromPhoneNumber;

private final DefaultMessageService messageService;

private static final String FONT_CREATION_MESSAGE_FORMAT = "[Fontory]\n\"%s\" 폰트가 제작중입니다.";
private static final String FONT_PROGRESS_MESSAGE_FORMAT = "[Fontory]\n\"%s\" 폰트 제작이 완료되었습니다.";

@Override
public void sendFontCreationNotification(String to, String fontName) {
public void sendFontCreateRequestNotification(String to, String fontName) {
sendSms(to, String.format(FONT_CREATION_MESSAGE_FORMAT, fontName));
}

@Override
public void sendFontProgressNotification(String to, String fontName) {
public void sendFontCreateCompleteNotification(String to, String fontName) {
sendSms(to, String.format(FONT_PROGRESS_MESSAGE_FORMAT, fontName));
}

private void sendSms(String to, String text) {
if (to == null || to.isBlank()) {
private void sendSms(String toPhoneNumber, String content) {
if (toPhoneNumber == null || toPhoneNumber.isBlank()) {
log.warn("Service warning: recipient phone number is empty");
return;
}

Message message = new Message();
message.setFrom(phoneNumber);
message.setTo(to);
message.setText(text);
message.setFrom(fromPhoneNumber);
message.setTo(toPhoneNumber);
message.setText(content);

messageService.sendOne(new SingleMessageSendingRequest(message));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.fontory.fontorybe.sms.application.port;

public interface SmsService {
void sendFontCreationNotification(String to, String fontName);
void sendFontProgressNotification(String to, String fontName);
void sendFontCreateRequestNotification(String to, String fontName);
void sendFontCreateCompleteNotification(String to, String fontName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
Expand Down Expand Up @@ -66,6 +67,8 @@ class FontControllerIntegrationTest {
private FileService fileService;
@MockitoBean
private FontRequestProducer fontRequestProducer;
@MockitoBean
private ApplicationEventPublisher eventPublisher;

private final Long existMemberId = 999L;
private final String existMemberName = "existMemberNickName";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Page;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.context.jdbc.Sql;
Expand All @@ -43,6 +45,8 @@ class FontServiceIntegrationTest {
private FileService fileService;
@MockitoBean
private FontRequestProducer fontRequestProducer;
@MockitoBean
private ApplicationEventPublisher eventPublisher;

private final Long existMemberId = 999L;
private final String existMemberName = "existMemberNickName";
Expand Down
Loading