rest controller practice : send mail - mail template(board_add)

This commit is contained in:
haerong22
2021-03-21 22:12:48 +09:00
parent 3213d8e24f
commit 4e9f8127c9
11 changed files with 1071 additions and 3 deletions

View File

@@ -210,4 +210,14 @@ public class ApiBoardController {
ServiceResult result = boardService.add(email, boardInput);
return ResponseResult.result(result);
}
@PostMapping("/api/board/email")
public ResponseEntity<?> chapter5_4(@RequestBody BoardInput boardInput,
@RequestHeader("TOKEN") String token) {
String email = JWTUtils.getIssuer(token);
ServiceResult result = boardService.add(email, boardInput);
return ResponseResult.result(result);
}
}

View File

@@ -4,7 +4,10 @@ import com.example.restcontroller.board.entity.*;
import com.example.restcontroller.board.exception.BoardTypeNotFoundException;
import com.example.restcontroller.board.model.*;
import com.example.restcontroller.board.repository.*;
import com.example.restcontroller.common.MailComponent;
import com.example.restcontroller.common.exception.BizException;
import com.example.restcontroller.mail.entity.MailTemplate;
import com.example.restcontroller.mail.repository.MailTemplateRepository;
import com.example.restcontroller.user.entity.User;
import com.example.restcontroller.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
@@ -29,8 +32,12 @@ public class BoardServiceImpl implements BoardService {
private final BoardScrapRepository boardScrapRepository;
private final BoardBookmarkRepository boardBookmarkRepository;
private final BoardCommentRepository boardCommentRepository;
private final UserRepository userRepository;
private final MailTemplateRepository mailTemplateRepository;
private final MailComponent mailComponent;
@Transactional
@Override
public ServiceResult addBoard(BoardTypeInput boardTypeInput) {
@@ -403,6 +410,18 @@ public class BoardServiceImpl implements BoardService {
boardRepository.save(board);
// 이메일 전송
Optional<MailTemplate> optionalMailTemplate = mailTemplateRepository.findByTemplateId("BOARD_ADD");
optionalMailTemplate.ifPresent((e) -> {
String fromEmail = e.getSendEmail();
String fromUserName = e.getSendUserName();
String title = e.getTitle().replaceAll("\\{USER_NAME\\}", userEntity.getUserName());
String contents = e.getContents().replaceAll("\\{BOARD_TITLE\\}", board.getTitle())
.replaceAll("\\{BOARD_CONTENTS\\}", board.getContent());
mailComponent.send(fromEmail, fromUserName, userEntity.getEmail(), userEntity.getUserName(), title, contents);
});
return ServiceResult.success();
}
}

View File

@@ -1,6 +1,7 @@
package com.example.restcontroller.common.interceptor;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.example.restcontroller.common.exception.AuthFailException;
import com.example.restcontroller.common.model.ResponseResult;
import com.example.restcontroller.util.JWTUtils;

View File

@@ -0,0 +1,36 @@
package com.example.restcontroller.mail.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Entity
public class MailTemplate {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String templateId;
private String title;
private String contents;
private String sendEmail;
private String sendUserName;
private LocalDateTime regDate;
}

View File

@@ -0,0 +1,15 @@
package com.example.restcontroller.mail.repository;
import com.example.restcontroller.mail.entity.MailTemplate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface MailTemplateRepository extends JpaRepository<MailTemplate, Long> {
Optional<MailTemplate> findByTemplateId(String templateId);
}

View File

@@ -6,7 +6,6 @@ spring:
datasource:
url: jdbc:h2:mem:testDb
#url: jdbc:h2:file:/Users/parkkyutae/Documents/sources/github/fastcampus-demo-01/record-example/sample1/backofficeDb
driver-class-name: org.h2.Driver
username: sa
password:

View File

@@ -55,4 +55,15 @@ values
('게시글 1의 댓글1', now(), 1, 1),
('게시글 1의 댓글2', now(), 1, 2),
('게시글 2의 댓글1', now(), 2, 1),
('게시글 2의 댓글2', now(), 2, 3);
('게시글 2의 댓글2', now(), 2, 3);
INSERT INTO MAIL_TEMPLATE(TEMPLATE_ID, TITLE, CONTENTS, SEND_EMAIL, SEND_USER_NAME, REG_DATE)
VALUES
('USER_RESET_PASSWORD',
'{USER_NAME}님의 비밀번호 초기화 요청입니다.',
'<div><p>{USER_NAME}님 안녕하세요.</p><p>아래 링크를 클릭하여, 비밀번호를 초기화해 주세요.</p><p><a href="{SERVER_URL}/reset?key={RESET_PASSWORD_KEY}">초기화</a></p></div>',
'test.email.12588@gmail.com', '관리자', now()),
('BOARD_ADD',
'{USER_NAME}님이 글을 게시하였습니다.',
'<div><p>제목: {BOARD_TITLE}</p><p>내용</p><div>{BOARD_CONTENTS}</div></div>',
'test.email.12588@gmail.com', '관리자', now());

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{USER_NAME}님이 글을 게시하였습니다.</title>
</head>
<body>
<div>
<p>제목: {BOARD_TITLE}</p>
<p>내용</p>
<div>
{BOARD_CONTENTS}
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{USER_NAME}님의 비밀번호 초기화 요청입니다.
</title>
</head>
<body>
<div>
<p>{USER_NAME}님 안녕하세요.</p>
<p>아래 링크를 클릭하여, 비밀번호를 초기화해 주세요.</p>
<p>
<a href="{SERVER_URL}/reset?key={RESET_PASSWORD_KEY}">초기화</a>
</p>
</div>
</body>
</html>