From e6a8608a4b3a5c63a81581b310bcd2beb61c51d5 Mon Sep 17 00:00:00 2001 From: vitinh0z Date: Thu, 18 Dec 2025 20:07:07 -0300 Subject: [PATCH 1/2] feat(notification): integrate disable reminder link in email service - Inject api.base-url configuration in EmailService - Generate dynamic disable URL in email template execution - Add configuration fallback for base URL in application.properties and test config Closes #79 --- .../reminderapi/mail/service/EmailService.java | 8 +++++++- .../reminder/controller/ReminderController.java | 1 - src/main/resources/application-test.properties | 4 +++- src/main/resources/application.properties | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/br/com/springnoobs/reminderapi/mail/service/EmailService.java b/src/main/java/br/com/springnoobs/reminderapi/mail/service/EmailService.java index 52c2404..80b423e 100644 --- a/src/main/java/br/com/springnoobs/reminderapi/mail/service/EmailService.java +++ b/src/main/java/br/com/springnoobs/reminderapi/mail/service/EmailService.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service @@ -27,6 +28,9 @@ public class EmailService { private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy").withZone(ZoneId.of("America/Sao_Paulo")); + @Value("${api.base-url}") + private String baseUrl; + public EmailService(MailEngine mailEngine, EmailSendFailureRepository emailSendFailureRepository) { this.mailEngine = mailEngine; this.emailSendFailureRepository = emailSendFailureRepository; @@ -39,7 +43,9 @@ public void send(Reminder reminder) { Contact contact = reminder.getUser().getContact(); - Map variables = buildEmailVariables(contact, reminder, "#"); + String disableUrl = baseUrl + "/reminders/" + reminder.getId() + "/disable-notifications"; + + Map variables = buildEmailVariables(contact, reminder, disableUrl); MimeMessage mimeMessage = mailEngine.createEmailMessage(variables); diff --git a/src/main/java/br/com/springnoobs/reminderapi/reminder/controller/ReminderController.java b/src/main/java/br/com/springnoobs/reminderapi/reminder/controller/ReminderController.java index 5a508f8..3757e44 100644 --- a/src/main/java/br/com/springnoobs/reminderapi/reminder/controller/ReminderController.java +++ b/src/main/java/br/com/springnoobs/reminderapi/reminder/controller/ReminderController.java @@ -57,6 +57,5 @@ public ResponseEntity delete(@PathVariable Long id) { public ResponseEntity disableEmail(@PathVariable Long id) throws SchedulerException { reminderService.disableReminderNotifications(id); return ResponseEntity.noContent().build(); - } } diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 1b8a90e..8310a08 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -7,4 +7,6 @@ spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.mail.host=localhost -spring.mail.port=2525 \ No newline at end of file +spring.mail.port=2525 + +api.base-url=http://localhost:8080 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 1ed8052..aa9d26a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -15,4 +15,6 @@ spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.quartz.job-store-type=jdbc -spring.quartz.jdbc.initialize-schema=always \ No newline at end of file +spring.quartz.jdbc.initialize-schema=always + +api.base.url=${API_BASE_URL:http://localhost:8080} \ No newline at end of file From e16135622bec255971b9f59af7c7e22685788904 Mon Sep 17 00:00:00 2001 From: vitinh0z Date: Fri, 19 Dec 2025 15:00:03 -0300 Subject: [PATCH 2/2] chore: add API_BASE_URL to docker-compose environment --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 3df7be1..3849a64 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,8 @@ services: MAIL_USERNAME: CHANGE_ME MAIL_PASSWORD: CHANGE_ME + API_BASE_URL: ${API_BASE_URL:-http://localhost:8080} + SPRING_DATASOURCE_HIKARI_INITIALIZATION_FAIL_TIMEOUT: -1 depends_on: mysql: