From 552143cd9ece9c3d2449ecf81c53ad42d8e9b6bf Mon Sep 17 00:00:00 2001 From: david-parkk Date: Mon, 19 Jan 2026 17:40:14 +0900 Subject: [PATCH 1/6] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/presentation/UserProfileController.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/ku_rum/backend/domain/user/presentation/UserProfileController.java b/src/main/java/ku_rum/backend/domain/user/presentation/UserProfileController.java index 27c4729f..6f5f585b 100644 --- a/src/main/java/ku_rum/backend/domain/user/presentation/UserProfileController.java +++ b/src/main/java/ku_rum/backend/domain/user/presentation/UserProfileController.java @@ -35,17 +35,6 @@ public class UserProfileController { private final UserService userService; - /** - * 프로필 조회 API - * - * @return - */ - @GetMapping("/profile") - public BaseResponse getUserProfile() { - UserProfileResponse response = userService.getUserProfile(); - return BaseResponse.ok(response); - } - /** * 프로필 조회 API * From fcd762a260d09178cc9087703cebff209c78e288 Mon Sep 17 00:00:00 2001 From: david-parkk Date: Mon, 26 Jan 2026 16:15:32 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/friend/application/FriendManageService.java | 2 +- .../backend/domain/notice/application/NoticeService.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/ku_rum/backend/domain/friend/application/FriendManageService.java b/src/main/java/ku_rum/backend/domain/friend/application/FriendManageService.java index 27e54fce..1355b8e2 100644 --- a/src/main/java/ku_rum/backend/domain/friend/application/FriendManageService.java +++ b/src/main/java/ku_rum/backend/domain/friend/application/FriendManageService.java @@ -52,7 +52,7 @@ public void requestFriend(final FriendRequest friendSendRequest) { public void respondToFriend(final FriendRequest friendSendRequest, boolean accept) { User currentUser = userUtil.getUser(); User toUser = userQueryService.getUserById(friendSendRequest.receiverId()); - + Friend friend = friendRepository.findByFromUserAndToUserAndStatus(toUser, currentUser, PENDING) .orElseThrow(() -> new GlobalException(NO_PENDING_LIST)); diff --git a/src/main/java/ku_rum/backend/domain/notice/application/NoticeService.java b/src/main/java/ku_rum/backend/domain/notice/application/NoticeService.java index c795aa79..d791f54b 100644 --- a/src/main/java/ku_rum/backend/domain/notice/application/NoticeService.java +++ b/src/main/java/ku_rum/backend/domain/notice/application/NoticeService.java @@ -93,7 +93,12 @@ public List findPrimaryNotices() { // 키워드 검색 로직 public Page searchByKeyword(String keyword, Pageable pageable) { - return noticeRepository.searchByKeyword(keyword, PublishStatus.SUCCESS_CRAWLING, pageable) + Pageable sortedPageable = PageRequest.of( + pageable.getPageNumber(), + pageable.getPageSize(), + Sort.by(Sort.Direction.DESC, "pubDate") + ); + return noticeRepository.searchByKeyword(keyword, PublishStatus.SUCCESS_CRAWLING, sortedPageable) .map(NoticeResponse::from); } } From 4a5ad2bd7d380c41276407e4738c1255b9b5011d Mon Sep 17 00:00:00 2001 From: david-parkk Date: Fri, 13 Feb 2026 16:04:14 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20build.gradle=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 타임리프 --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 6e138896..4043f622 100644 --- a/build.gradle +++ b/build.gradle @@ -139,6 +139,9 @@ dependencies { // Mail Service implementation 'org.springframework.boot:spring-boot-starter-mail' + // Thymeleaf (이메일 템플릿) + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + // Spring Security implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:spring-security-test' From 2afa29e1e2d133c09e6456af6e65c67c245312e5 Mon Sep 17 00:00:00 2001 From: david-parkk Date: Fri, 13 Feb 2026 16:04:48 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mail/application/MailSenderService.java | 27 +++--- .../common/mail/application/MailService.java | 13 ++- .../resources/templates/email_template.html | 91 +++++++++++++++++++ 3 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/templates/email_template.html diff --git a/src/main/java/ku_rum/backend/domain/common/mail/application/MailSenderService.java b/src/main/java/ku_rum/backend/domain/common/mail/application/MailSenderService.java index 2fa413ae..c693c2d1 100644 --- a/src/main/java/ku_rum/backend/domain/common/mail/application/MailSenderService.java +++ b/src/main/java/ku_rum/backend/domain/common/mail/application/MailSenderService.java @@ -1,9 +1,11 @@ package ku_rum.backend.domain.common.mail.application; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; import ku_rum.backend.global.exception.user.MailSendException; import lombok.RequiredArgsConstructor; -import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import static ku_rum.backend.global.support.status.BaseExceptionResponseStatus.MAIL_SEND_EXCEPTION; @@ -13,19 +15,18 @@ public class MailSenderService { private final JavaMailSender emailSender; - public void send(String toEmail, String title, String text) { + public void sendHtml(String toEmail, String title, String htmlContent) { try { - emailSender.send(createEmailForm(toEmail, title, text)); - } catch (RuntimeException e) { + MimeMessage mimeMessage = emailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); + + helper.setTo(toEmail); + helper.setSubject(title); + helper.setText(htmlContent, true); + + emailSender.send(mimeMessage); + } catch (MessagingException e) { throw new MailSendException(MAIL_SEND_EXCEPTION); } } - - private SimpleMailMessage createEmailForm(String toEmail, String title, String text) { - SimpleMailMessage message = new SimpleMailMessage(); - message.setTo(toEmail); - message.setSubject(title); - message.setText(text); - return message; - } -} +} \ No newline at end of file diff --git a/src/main/java/ku_rum/backend/domain/common/mail/application/MailService.java b/src/main/java/ku_rum/backend/domain/common/mail/application/MailService.java index 11967961..5942db7d 100644 --- a/src/main/java/ku_rum/backend/domain/common/mail/application/MailService.java +++ b/src/main/java/ku_rum/backend/domain/common/mail/application/MailService.java @@ -4,13 +4,14 @@ import ku_rum.backend.domain.common.mail.domain.repository.MailAuthRepository; import ku_rum.backend.domain.common.mail.dto.request.MailSendRequest; import ku_rum.backend.domain.common.mail.dto.request.MailVerificationRequest; -import ku_rum.backend.domain.common.mail.dto.response.MailVerificationResponse; import ku_rum.backend.global.exception.user.MailSendException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.thymeleaf.context.Context; +import org.thymeleaf.spring6.SpringTemplateEngine; import java.time.Duration; @@ -24,6 +25,7 @@ public class MailService { private final MailSenderService mailSenderService; private final MailAuthRepository mailAuthRepository; + private final SpringTemplateEngine templateEngine; @Async @Transactional @@ -34,10 +36,17 @@ public void sendCodeToEmail(final MailSendRequest request) { request.email(), MAIL_SEND_INFO.getCODE_LENGTH()); - mailSenderService.send(request.email(), MAIL_SEND_INFO.getTITLE(), mailAuth.getAuthCode()); + String htmlContent = createEmailContent(mailAuth.getAuthCode()); + mailSenderService.sendHtml(request.email(), MAIL_SEND_INFO.getTITLE(), htmlContent); mailAuthRepository.save(mailAuth, Duration.ofMillis(MAIL_SEND_INFO.getAUTH_EXPIRED_MILLS())); } + private String createEmailContent(String code) { + Context context = new Context(); + context.setVariable("code", code); + return templateEngine.process("email_template", context); + } + private void deleteByEmail(MailSendRequest request) { mailAuthRepository.findByEmail(request.email()) .ifPresent(existingMailAuth -> { diff --git a/src/main/resources/templates/email_template.html b/src/main/resources/templates/email_template.html new file mode 100644 index 00000000..68b6369b --- /dev/null +++ b/src/main/resources/templates/email_template.html @@ -0,0 +1,91 @@ + + + + + + + Kuroom 인증 메일 + + + + +
+ +
+ + + + + + +
+

KUROOM

+
+
+ +
+
+ +
+

+ 이메일 인증 +

+

+ 건국대학교 학생들을 위한 서비스, 쿠룸 +

+

+ 안녕하세요. 쿠룸입니다.
+ 앱으로 돌아가서 아래 인증 코드를 입력해주세요.
+ 해당 인증코드는 3분간 유효합니다. +

+ +

+ 123456 +

+
+
+ +

+ Copyright © 2026 Kuroom. All rights reserved. +

+
+
+
+
+ + From c0a624f54588199c7d0454eddadcf6260f40c4c0 Mon Sep 17 00:00:00 2001 From: david-parkk Date: Fri, 13 Feb 2026 16:13:50 +0900 Subject: [PATCH 5/6] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- .../mail/application/MailServiceTest.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/test/java/ku_rum/backend/domain/common/mail/application/MailServiceTest.java b/src/test/java/ku_rum/backend/domain/common/mail/application/MailServiceTest.java index 0f0b0e25..5f742c36 100644 --- a/src/test/java/ku_rum/backend/domain/common/mail/application/MailServiceTest.java +++ b/src/test/java/ku_rum/backend/domain/common/mail/application/MailServiceTest.java @@ -1,5 +1,16 @@ package ku_rum.backend.domain.common.mail.application; +import static org.junit.Assert.assertThrows; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.time.Duration; +import java.util.Optional; import ku_rum.backend.domain.common.mail.domain.MailAuth; import ku_rum.backend.domain.common.mail.domain.repository.MailAuthRepository; import ku_rum.backend.domain.common.mail.dto.request.MailSendRequest; @@ -11,31 +22,21 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.test.context.ActiveProfiles; - -import java.time.Duration; -import java.util.Optional; +import org.thymeleaf.context.Context; +import org.thymeleaf.spring6.SpringTemplateEngine; -import static org.junit.Assert.assertThrows; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.*; - -@ActiveProfiles("test") @ExtendWith(MockitoExtension.class) class MailServiceTest { - @Mock - private JavaMailSender emailSender; - @Mock private MailSenderService mailSenderService; @Mock private MailAuthRepository mailAuthRepository; + @Mock + private SpringTemplateEngine templateEngine; + @InjectMocks private MailService mailService; @@ -44,13 +45,16 @@ class MailServiceTest { void sendCodeToEmail_success() { // given MailSendRequest request = new MailSendRequest("test@example.com"); - MailAuth mailAuth = MailAuth.create(request.email(), 6); + String htmlContent = "테스트"; + + given(templateEngine.process(eq("email_template"), any(Context.class))).willReturn(htmlContent); // when mailService.sendCodeToEmail(request); // then - verify(mailSenderService, times(1)).send(eq(request.email()), anyString(), anyString()); + verify(templateEngine, times(1)).process(eq("email_template"), any(Context.class)); + verify(mailSenderService, times(1)).sendHtml(eq(request.email()), anyString(), eq(htmlContent)); verify(mailAuthRepository, times(1)).save(any(MailAuth.class), any(Duration.class)); } From 481bc8274c6c98de64d89b045de68f079678ec8d Mon Sep 17 00:00:00 2001 From: david-parkk Date: Fri, 13 Feb 2026 16:31:52 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/email_template.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/templates/email_template.html b/src/main/resources/templates/email_template.html index 68b6369b..be9cdf91 100644 --- a/src/main/resources/templates/email_template.html +++ b/src/main/resources/templates/email_template.html @@ -6,6 +6,7 @@ Kuroom 인증 메일 +