rest controller practice : send mail - mail template(board_add)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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());
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user