Skip to content

Commit

Permalink
[REFACTOR] 자잘한 버그 해결 (#54)
Browse files Browse the repository at this point in the history
* [REFACTOR] 모든 사업계획서 목록 조회 게시글 작성 여부 추가

* [REFACTOR] 메일 발송 내용 객체 분리

* [REFACTOR] 메일 내용 html 형식으로 변경
  • Loading branch information
kyukong authored Mar 10, 2024
1 parent 72749b9 commit 3bca0b4
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class AllPlanResponse {
private final String closeDate;
private final String entranceStatus;
private final String category;
private final boolean writtenPopup;
private final String createdDate;

public static AllPlanResponse from(AllPlanMapperResponse response) {
Expand All @@ -34,6 +35,7 @@ public static AllPlanResponse from(AllPlanMapperResponse response) {
DateConvertor.convertDateFormatForResponse(response.getCloseDate()),
EntranceStatus.from(response.getEntranceStatus()).getDescription(),
Category.from(response.getCategory()).getDescription(),
response.isWrittenPopup(),
DateConvertor.convertDateFormatForResponse(response.getCreatedDate())
);
}
Expand Down
41 changes: 12 additions & 29 deletions src/main/java/com/oya/kr/popup/service/PlanService.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import com.oya.kr.popup.controller.dto.response.PlansResponse;
import com.oya.kr.popup.controller.dto.response.PopupDetailResponse;
import com.oya.kr.popup.controller.dto.response.UserPlanResponse;
import com.oya.kr.popup.domain.Popup;
import com.oya.kr.popup.domain.enums.Category;
import com.oya.kr.popup.domain.enums.Department;
import com.oya.kr.popup.domain.Plan;
Expand All @@ -37,10 +36,10 @@
import com.oya.kr.popup.mapper.dto.response.MyPopupDetailMapper;
import com.oya.kr.popup.mapper.dto.response.PlanAboutMeMapperResponse;
import com.oya.kr.popup.mapper.dto.response.PlanMapperResponse;
import com.oya.kr.popup.mapper.dto.response.PopupDetailMapperResponse;
import com.oya.kr.popup.mapper.dto.response.PopupMapperResponse;
import com.oya.kr.popup.repository.PlanRepository;
import com.oya.kr.popup.repository.PopupRepository;
import com.oya.kr.popup.support.PlanMailTemplate;
import com.oya.kr.popup.support.dto.response.MailResponse;
import com.oya.kr.user.domain.User;
import com.oya.kr.user.repository.UserRepository;

Expand All @@ -57,17 +56,20 @@ public class PlanService {
private final PopupRepository popupRepository;
private final StorageConnector s3Connector;
private final MailSender sesSender;
private final PlanMailTemplate planMailTemplate;

public PlanService(
UserRepository userRepository,
PlanRepository planRepository, PopupRepository popupRepository,
StorageConnector s3Connector,
@Qualifier("SESSender") MailSender sesSender) {
@Qualifier("SESSender") MailSender sesSender,
PlanMailTemplate planMailTemplate) {
this.userRepository = userRepository;
this.planRepository = planRepository;
this.popupRepository = popupRepository;
this.s3Connector = s3Connector;
this.sesSender = sesSender;
this.planMailTemplate = planMailTemplate;
}

/**
Expand Down Expand Up @@ -258,17 +260,10 @@ public void wait(String email, Long planId) {
savedPlan.waiting();
planRepository.updateEntranceStatus(savedPlan);

String title = "[THEPOP] 제안해주신 사업계획서가 대기 상태로 전환되었습니다.";
String content = String.format(
"%s 고객님, 안녕하세요.\n"
+ "제안해주신 사업계획서가 대기 상태로 전환되었습니다.\n"
+ "대기 상태에는 커뮤니티 게시글을 자유롭게 작성하실 수 있습니다.\n"
+ "이후 제안이 승인되면 팝업스토어 게시글을 올려 팝업스토어를 홍보하실 수 있습니다.\n"
+ "팝업스토어 제안에 감사드립니다.\n"
+ "THEPOP 드림", savedUser.getNickname());
MailResponse mailResponse = planMailTemplate.messageForWait(savedUser.getNickname());

SenderRequest request = new SenderRequest(
savedUser.getEmail(), List.of(businessUser.getEmail()), title, content);
savedUser.getEmail(), List.of(businessUser.getEmail()), mailResponse.getTitle(), mailResponse.getContent());
sesSender.send(request);
}

Expand All @@ -290,16 +285,10 @@ public void approve(String email, Long planId) {
savedPlan.approve();
planRepository.updateEntranceStatus(savedPlan);

String title = "[THEPOP] 제안해주신 사업계획서가 승인되었습니다.";
String content = String.format(
"%s 고객님, 안녕하세요.\n"
+ "팝업스토어 입점을 축하드립니다!\n"
+ "사업계획서가 승인되어 팝업스토어 게시글을 올려 팝업스토어를 홍보하실 수 있습니다.\n"
+ "팝업스토어 제안에 감사드립니다.\n"
+ "THEPOP 드림", savedUser.getNickname());
MailResponse mailResponse = planMailTemplate.messageForApprove(savedUser.getNickname());

SenderRequest request = new SenderRequest(
savedUser.getEmail(), List.of(savedPlan.getUser().getEmail()), title, content);
savedUser.getEmail(), List.of(savedPlan.getUser().getEmail()), mailResponse.getTitle(), mailResponse.getContent());
sesSender.send(request);
}

Expand All @@ -321,16 +310,10 @@ public void deny(String email, Long planId) {
savedPlan.deny();
planRepository.updateEntranceStatus(savedPlan);

String title = "[THEPOP] 제안해주신 사업계획서가 거절되었습니다.";
String content = String.format(
"%s 고객님, 안녕하세요.\n"
+ "안타깝지만 제안해주신 사업계획서는 현대백화점과 함께하지 못하게 되었습니다.\n"
+ "이후에 더 좋은 사업계획서가 있다면 언제든 연락 바랍니다.\n"
+ "팝업스토어 제안에 감사드립니다.\n"
+ "THEPOP 드림", savedUser.getNickname());
MailResponse mailResponse = planMailTemplate.messageForDeny(savedUser.getNickname());

SenderRequest request = new SenderRequest(
savedUser.getEmail(), List.of(savedPlan.getUser().getEmail()), title, content);
savedUser.getEmail(), List.of(savedPlan.getUser().getEmail()), mailResponse.getTitle(), mailResponse.getContent());
sesSender.send(request);
}

Expand Down
100 changes: 100 additions & 0 deletions src/main/java/com/oya/kr/popup/support/PlanMailTemplate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.oya.kr.popup.support;

import org.springframework.stereotype.Component;

import com.oya.kr.popup.support.dto.response.MailResponse;

/**
* @author 김유빈
* @since 2024.03.10
*/
@Component
public class PlanMailTemplate {

/**
* 사업계획서 대기 메일 메시지 작성
*
* @parameter String
* @return MailResponse
* @author 김유빈
* @since 2024.03.10
*/
public MailResponse messageForWait(String nickname) {
return new MailResponse(
"[THEPOP] 제안해주신 사업계획서가 대기 상태로 전환되었습니다.",
String.format("<!DOCTYPE html>\n"
+ "<html lang=\"ko\">\n"
+ "<head>\n"
+ " <meta charset=\"UTF-8\">\n"
+ " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
+ "</head>\n"
+ "<body>\n"
+ " <h2>제안해주신 사업계획서가 대기 상태로 전환되었습니다.</h2>"
+ " <p>%s 고객님, 안녕하세요.</p>\n"
+ " <p>제안해주신 사업계획서가 대기 상태로 전환되었습니다.</p>\n"
+ " <p>대기 상태에는 커뮤니티 게시글을 자유롭게 작성하실 수 있습니다.</p>\n"
+ " <p>이후 제안이 승인되면 팝업스토어 게시글을 올려 팝업스토어를 홍보하실 수 있습니다.</p>\n"
+ " <p>팝업스토어 제안에 감사드립니다.</p>\n"
+ " <p>THEPOP 드림</p>\n"
+ "</body>\n"
+ "</html>\n", nickname));
}

/**
* 사업계획서 승인 메일 메시지 작성
*
* @parameter String
* @return MailResponse
* @author 김유빈
* @since 2024.03.10
*/
public MailResponse messageForApprove(String nickname) {
return new MailResponse(
"[THEPOP] 제안해주신 사업계획서가 승인되었습니다.",
String.format("<!DOCTYPE html>\n"
+ "<html lang=\"ko\">\n"
+ "<head>\n"
+ " <meta charset=\"UTF-8\">\n"
+ " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
+ "</head>\n"
+ "<body>\n"
+ " <h2>제안해주신 사업계획서가 승인되었습니다.</h2>"
+ " <p>%s 고객님, 안녕하세요.</p>\n"
+ " <p>팝업스토어 입점을 축하드립니다!</p>\n"
+ " <p>사업계획서가 승인되어 팝업스토어 게시글을 올려 팝업스토어를 홍보하실 수 있습니다.</p>\n"
+ " <p>팝업스토어 제안에 감사드립니다.</p>\n"
+ " <p>THEPOP 드림</p>\n"
+ "</body>\n"
+ "</html>\n" , nickname));
}

/**
* 사업계획서 철회 메일 메시지 작성
*
* @parameter String
* @return MailResponse
* @author 김유빈
* @since 2024.03.10
*/
public MailResponse messageForDeny(String nickname) {
return new MailResponse(
"[THEPOP] 제안해주신 사업계획서가 거절되었습니다.",
String.format(
"<!DOCTYPE html>\n"
+ "<html lang=\"ko\">\n"
+ "<head>\n"
+ " <meta charset=\"UTF-8\">\n"
+ " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
+ "</head>\n"
+ "<body>\n"
+ " <h2>제안해주신 사업계획서가 거절되었습니다.</h2>"
+ " <p>%s 고객님, 안녕하세요.</p>\n"
+ " <p>안타깝지만 제안해주신 사업계획서는 현대백화점과 함께하지 못하게 되었습니다.</p>\n"
+ " <p>이후에 더 좋은 사업계획서가 있다면 언제든 연락 바랍니다.</p>\n"
+ " <p>팝업스토어 제안에 감사드립니다.</p>\n"
+ " <p>THEPOP 드림</p>\n"
+ "</body>\n"
+ "</html>\n" , nickname)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.oya.kr.popup.support.dto.response;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class MailResponse {

private final String title;
private final String content;
}

0 comments on commit 3bca0b4

Please sign in to comment.