diff --git a/src/main/java/com/example/demo/domain/newsletter/domain/Newsletter.java b/src/main/java/com/example/demo/domain/newsletter/domain/Newsletter.java index e0e65ca2..88906357 100644 --- a/src/main/java/com/example/demo/domain/newsletter/domain/Newsletter.java +++ b/src/main/java/com/example/demo/domain/newsletter/domain/Newsletter.java @@ -25,26 +25,30 @@ public class Newsletter extends BaseEntity { @Column(nullable = false, unique = true) private String email; @Column(nullable = false) - private Boolean isSeminarContentUpdated; + private Boolean seminarContentNotice; @Column(nullable = false) - private Boolean isStudyUpdated; + private Boolean studyNotice; @Column(nullable = false) - private Boolean isProjectUpdated; + private Boolean projectNotice; + @Column(nullable = false) + private Boolean mentoringNotice; @Builder - public Newsletter(String email, Boolean isSeminarContentUpdated, Boolean isStudyUpdated, Boolean isProjectUpdated) { + public Newsletter(String email, Boolean mentoringNotice, Boolean projectNotice, Boolean seminarContentNotice, Boolean studyNotice) { this.email = email; - this.isSeminarContentUpdated = isSeminarContentUpdated; - this.isStudyUpdated = isStudyUpdated; - this.isProjectUpdated = isProjectUpdated; + this.mentoringNotice = mentoringNotice; + this.projectNotice = projectNotice; + this.seminarContentNotice = seminarContentNotice; + this.studyNotice = studyNotice; } public static Newsletter from(NewsletterSubscribeRequest request) { return Newsletter.builder() .email(request.email()) - .isSeminarContentUpdated(request.isSeminarContentUpdated()) - .isStudyUpdated(request.isStudyUpdated()) - .isProjectUpdated(request.isProjectUpdated()) + .seminarContentNotice(request.seminarContentNotice()) + .studyNotice(request.studyNotice()) + .projectNotice(request.projectNotice()) + .mentoringNotice(request.mentoringNotice()) .build(); } @@ -53,8 +57,9 @@ public void updateNewsletterEmail(@Valid NewsletterUpdateEmailRequest request) { } public void updateNewsletterNotify(@Valid NewsletterUpdateNotifyRequest request) { - this.isSeminarContentUpdated = request.isSeminarContentUpdated(); - this.isStudyUpdated = request.isStudyUpdated(); - this.isProjectUpdated = request.isProjectUpdated(); + this.seminarContentNotice = request.seminarContentNotice(); + this.studyNotice = request.studyNotice(); + this.projectNotice = request.projectNotice(); + this.mentoringNotice = request.mentoringNotice(); } } diff --git a/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterSubscribeRequest.java b/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterSubscribeRequest.java index bed87b6a..20101d00 100644 --- a/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterSubscribeRequest.java +++ b/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterSubscribeRequest.java @@ -7,8 +7,9 @@ public record NewsletterSubscribeRequest( @Pattern(regexp = EMAIL_REGEXP, message = "이메일 정규식을 맞춰주세요.") String email, - @NotNull(message = "세미나 내용정리 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isSeminarContentUpdated, - @NotNull(message = "스터디 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isStudyUpdated, - @NotNull(message = "프로젝트 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isProjectUpdated + @NotNull(message = "세미나 내용정리 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean seminarContentNotice, + @NotNull(message = "스터디 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean studyNotice, + @NotNull(message = "프로젝트 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean projectNotice, + @NotNull(message = "멘토링 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean mentoringNotice ) { } diff --git a/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterUpdateNotifyRequest.java b/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterUpdateNotifyRequest.java index 1a84853f..64699705 100644 --- a/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterUpdateNotifyRequest.java +++ b/src/main/java/com/example/demo/domain/newsletter/domain/dto/request/NewsletterUpdateNotifyRequest.java @@ -6,8 +6,9 @@ import static com.example.demo.global.regex.UserRegex.EMAIL_REGEXP; public record NewsletterUpdateNotifyRequest( - @NotNull(message = "세미나 내용정리 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isSeminarContentUpdated, - @NotNull(message = "스터디 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isStudyUpdated, - @NotNull(message = "프로젝트 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean isProjectUpdated + @NotNull(message = "세미나 내용정리 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean seminarContentNotice, + @NotNull(message = "스터디 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean studyNotice, + @NotNull(message = "프로젝트 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean projectNotice, + @NotNull(message = "멘토링 새 글 업데이트 알림 여/부를 선택해주세요.") Boolean mentoringNotice ) { } diff --git a/src/main/java/com/example/demo/domain/newsletter/domain/dto/response/NewsletterInfo.java b/src/main/java/com/example/demo/domain/newsletter/domain/dto/response/NewsletterInfo.java index e365b45e..9a1a23cd 100644 --- a/src/main/java/com/example/demo/domain/newsletter/domain/dto/response/NewsletterInfo.java +++ b/src/main/java/com/example/demo/domain/newsletter/domain/dto/response/NewsletterInfo.java @@ -8,9 +8,10 @@ public record NewsletterInfo( Long id, String email, - Boolean isSeminarContentUpdated, - Boolean isStudyUpdated, - Boolean isProjectUpdated, + Boolean seminarContentNotice, + Boolean studyNotice, + Boolean projectNotice, + Boolean mentoringNotice, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime createdAt, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss") @@ -20,9 +21,10 @@ public static NewsletterInfo from(Newsletter newsletter) { return new NewsletterInfo( newsletter.getId(), newsletter.getEmail(), - newsletter.getIsSeminarContentUpdated(), - newsletter.getIsStudyUpdated(), - newsletter.getIsProjectUpdated(), + newsletter.getSeminarContentNotice(), + newsletter.getStudyNotice(), + newsletter.getProjectNotice(), + newsletter.getMentoringNotice(), newsletter.getCreatedAt(), newsletter.getUpdatedAt() ); diff --git a/src/main/java/com/example/demo/domain/newsletter/repository/NewsletterRepository.java b/src/main/java/com/example/demo/domain/newsletter/repository/NewsletterRepository.java index 4b46277f..7c4aa715 100644 --- a/src/main/java/com/example/demo/domain/newsletter/repository/NewsletterRepository.java +++ b/src/main/java/com/example/demo/domain/newsletter/repository/NewsletterRepository.java @@ -13,8 +13,9 @@ public interface NewsletterRepository extends JpaRepository { @Query("SELECT n.email FROM Newsletter n WHERE " + "(:postType = 'SEMINAR_NOTICE' OR " + - "(n.isSeminarContentUpdated = true AND :postType = 'SEMINAR_SUMMARY') OR " + - "(n.isStudyUpdated = true AND :postType = 'STUDY') OR " + - "(n.isProjectUpdated = true AND :postType = 'PROJECT'))") + "(n.seminarContentNotice = true AND :postType = 'SEMINAR_SUMMARY') OR " + + "(n.studyNotice = true AND :postType = 'STUDY') OR " + + "(n.mentoringNotice = true AND :postType = 'MENTORING') OR " + + "(n.projectNotice = true AND :postType = 'PROJECT'))") List findSubscriberEmails(@Param("postType") String postType); } diff --git a/src/main/java/com/example/demo/domain/newsletter/strategy/MentoringNoticeEmailDeliveryStrategy.java b/src/main/java/com/example/demo/domain/newsletter/strategy/MentoringNoticeEmailDeliveryStrategy.java new file mode 100644 index 00000000..43af3697 --- /dev/null +++ b/src/main/java/com/example/demo/domain/newsletter/strategy/MentoringNoticeEmailDeliveryStrategy.java @@ -0,0 +1,54 @@ +package com.example.demo.domain.newsletter.strategy; + +import com.example.demo.domain.recruitment_board.domain.dto.vo.RecruitmentBoardType; +import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.util.HashMap; +import java.util.Map; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class MentoringNoticeEmailDeliveryStrategy implements EmailDeliveryStrategy { + private String type; + private String topicTag; + private String title; + private String author; + private String link; + + @Override + public String getTemplateName() { + return "mentoring_notice"; + } + + @Override + public Map getVariables() { + Map variables = new HashMap<>(); + variables.put("type", type); + variables.put("topicTag", topicTag); + variables.put("title", title); + variables.put("author", author); + variables.put("link", link); + return variables; + } + + @Override + public String getSubject() { + return "[야밤의금오톡] '멘토링 공고' 새 글 알림"; + } + + public static MentoringNoticeEmailDeliveryStrategy create(RecruitmentBoard recruitmentBoard) { + if (!recruitmentBoard.getType().equals(RecruitmentBoardType.MENTORING)) { + throw new IllegalArgumentException("멘토링에 대한 이메일 알림만 허용합니다."); + } + return new MentoringNoticeEmailDeliveryStrategy( + recruitmentBoard.getType().name(), + recruitmentBoard.getTag().name(), + recruitmentBoard.getTitle(), + recruitmentBoard.getUser().getNickname(), + "https://프론트도메인/~" // TODO. 수정 필요 + ); + } +} diff --git a/src/main/resources/security b/src/main/resources/security index 3cd7f729..3d696ec2 160000 --- a/src/main/resources/security +++ b/src/main/resources/security @@ -1 +1 @@ -Subproject commit 3cd7f72989fa8b36eef451493912cd5218745347 +Subproject commit 3d696ec21352dd549d5b3ee07bee265fc70daef3 diff --git a/src/main/resources/templates/mentoring_notice.html b/src/main/resources/templates/mentoring_notice.html new file mode 100644 index 00000000..a448b8f3 --- /dev/null +++ b/src/main/resources/templates/mentoring_notice.html @@ -0,0 +1,46 @@ + + + + + + [야밤의금오톡] '멘토링 공고' 새 글 알림 + + +

안녕하세요, 야밤의금오톡 뉴스레터를 구독해주신 여러분!

+ +
+ +

+ 새로운 멘토링 타입 그룹을 모집하는 게시글이 게시되었습니다.
+ 멘토링 주제 태그에 관심이 있는 분들은 아래 게시글을 통해 자세한 내용을 확인해주시기 바랍니다. +

+ +
    +
  • +

    멘토링 제목 : 게시글 제목

    +
  • +
  • +

    작성자 : 작성자

    +
  • +
  • +

    게시글 바로가기 : 게시글 링크

    +
  • +
+ +

+ 멘토링에 참여하여 함께 학습하고 성장하고자 하는 여러분들의 많은 관심 + 부탁드립니다. +

+ +

+ 추가 문의사항이 있으신 분들은 게시글 아래 댓글로 문의해주시면 + 감사하겠습니다. +

+ +

감사합니다.

+ +
+ +

[야밤의 금오톡 기술 블로그팀]

+ +