From 1d36183d356cfd8d7c439701da14203b187cfd2a Mon Sep 17 00:00:00 2001 From: kimgunwooo <96743351+kimgunwooo@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:33:21 +0900 Subject: [PATCH 1/2] =?UTF-8?q?add=20:=20=EB=A9=98=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B8=B0=EC=A1=B4=20=ED=95=84=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/newsletter/domain/Newsletter.java | 31 +++++++++++-------- .../request/NewsletterSubscribeRequest.java | 7 +++-- .../NewsletterUpdateNotifyRequest.java | 7 +++-- .../domain/dto/response/NewsletterInfo.java | 14 +++++---- .../repository/NewsletterRepository.java | 7 +++-- src/main/resources/security | 2 +- 6 files changed, 39 insertions(+), 29 deletions(-) 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/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 From e0aad15979cb116cfd4e1a401a7f10d9847cbaf5 Mon Sep 17 00:00:00 2001 From: kimgunwooo <96743351+kimgunwooo@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:34:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?add=20:=20=EB=A9=98=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=A0=84=EC=86=A1=20=ED=8F=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=ED=95=B4=EB=8B=B9=20=EC=A0=84=EB=9E=B5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MentoringNoticeEmailDeliveryStrategy.java | 54 +++++++++++++++++++ .../resources/templates/mentoring_notice.html | 46 ++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/main/java/com/example/demo/domain/newsletter/strategy/MentoringNoticeEmailDeliveryStrategy.java create mode 100644 src/main/resources/templates/mentoring_notice.html 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/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 @@ + + + + + + [야밤의금오톡] '멘토링 공고' 새 글 알림 + + +

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

+ +
+ +

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

+ +
    +
  • +

    멘토링 제목 : 게시글 제목

    +
  • +
  • +

    작성자 : 작성자

    +
  • +
  • +

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

    +
  • +
+ +

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

+ +

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

+ +

감사합니다.

+ +
+ +

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

+ +