From d8056e04a7d5571e5d9ec1661c7769bcba50aaaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicen=C3=ADkov=C3=A1=20Jitka?= <Jitka.Vicenikova@partners.cz> Date: Sun, 23 Apr 2023 10:36:40 +0200 Subject: [PATCH] Send notifications from application module --- .../cz/muni/pa165/config/ServiceConfig.java | 6 +++ .../pa165/service/ApplicationService.java | 43 ++++++++++++++++--- .../pa165/service/ApplicationServiceTest.java | 4 +- .../muni/pa165/facade/NotificationFacade.java | 6 ++- .../pa165/rest/NotificationController.java | 5 ++- .../src/main/resources/application.properties | 1 - 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/application/src/main/java/cz/muni/pa165/config/ServiceConfig.java b/application/src/main/java/cz/muni/pa165/config/ServiceConfig.java index e1616ef..9113f55 100644 --- a/application/src/main/java/cz/muni/pa165/config/ServiceConfig.java +++ b/application/src/main/java/cz/muni/pa165/config/ServiceConfig.java @@ -1,8 +1,10 @@ package cz.muni.pa165.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.client.RestTemplate; /** * @author Michal Badin @@ -11,4 +13,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @ComponentScan @EnableTransactionManagement public class ServiceConfig { + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } } \ No newline at end of file diff --git a/application/src/main/java/cz/muni/pa165/service/ApplicationService.java b/application/src/main/java/cz/muni/pa165/service/ApplicationService.java index bdb6555..8061617 100644 --- a/application/src/main/java/cz/muni/pa165/service/ApplicationService.java +++ b/application/src/main/java/cz/muni/pa165/service/ApplicationService.java @@ -4,12 +4,16 @@ import cz.muni.pa165.data.enums.ApplicationStatusEnum; import cz.muni.pa165.data.model.Application; import cz.muni.pa165.data.repository.ApplicationRepository; import cz.muni.pa165.exceptions.ResourceNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; import java.time.LocalDate; import java.util.HashMap; @@ -22,12 +26,18 @@ import java.util.Optional; */ @Service public class ApplicationService { + private static final Logger log = LoggerFactory.getLogger(ApplicationService.class); + private static final String NOTIFICATION_MODULE_URL_NEW = "http://localhost:8083/notification/application/new"; + private static final String NOTIFICATION_MODULE_URL_STATUS = "http://localhost:8083/notification/application/status"; + private static final List<String> NOTIFICATION_RECEIVERS = List.of("jitka.vicenikova@gmail.com"); private final ApplicationRepository applicationRepository; + private final RestTemplate restTemplate; @Autowired - public ApplicationService(ApplicationRepository applicationRepository) { + public ApplicationService(ApplicationRepository applicationRepository, RestTemplate restTemplate) { this.applicationRepository = applicationRepository; + this.restTemplate = restTemplate; } @Transactional(readOnly = true) @@ -38,7 +48,16 @@ public class ApplicationService { public Application create(Application application) { application.setFillingOutDate(LocalDate.now()); application.setStatus(ApplicationStatusEnum.PENDING); - return applicationRepository.save(application); + + var savedApplication = applicationRepository.save(application); + + try { + sendPostRequest(savedApplication, NOTIFICATION_MODULE_URL_NEW); + } catch (RestClientException | IllegalArgumentException e) { + log.debug(String.format("The notification module is not reachable on the URL: %s", NOTIFICATION_MODULE_URL_NEW)); + } + + return savedApplication; } @Transactional(readOnly = true) @@ -56,17 +75,27 @@ public class ApplicationService { applicationFromDb.get().setStatus(applicationStatusEnum); - return applicationRepository.save(applicationFromDb.get()); + var savedApplication = applicationRepository.save(applicationFromDb.get()); + + if (savedApplication.getStatus() != ApplicationStatusEnum.PENDING) { + try { + sendPostRequest(savedApplication, NOTIFICATION_MODULE_URL_STATUS); + } catch (RestClientException | IllegalArgumentException e) { + log.debug(String.format("The notification module is not reachable on the URL: %s", NOTIFICATION_MODULE_URL_NEW)); + } + } + + return savedApplication; } - /* private void sendNewApplicationPostRequest(Application application) { + private void sendPostRequest(Application application, String url) { Map<String, Object> notification = new HashMap<>(); - notification.put("carComponent", component); + notification.put("application", application); notification.put("receivers", NOTIFICATION_RECEIVERS); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<Map<String, Object>> request = new HttpEntity<>(notification, headers); - restTemplate.postForObject(NOTIFICATION_MODULE_URL, request, String.class); - }*/ + restTemplate.postForObject(url, request, String.class); + } } diff --git a/application/src/test/java/cz/muni/pa165/service/ApplicationServiceTest.java b/application/src/test/java/cz/muni/pa165/service/ApplicationServiceTest.java index c2bd848..4bfd428 100644 --- a/application/src/test/java/cz/muni/pa165/service/ApplicationServiceTest.java +++ b/application/src/test/java/cz/muni/pa165/service/ApplicationServiceTest.java @@ -6,6 +6,7 @@ import cz.muni.pa165.data.repository.ApplicationRepository; import cz.muni.pa165.exceptions.ResourceNotFoundException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.web.client.RestTemplate; import java.time.LocalDate; import java.util.Optional; @@ -16,7 +17,8 @@ import static org.mockito.Mockito.when; class ApplicationServiceTest { ApplicationRepository applicationRepository = Mockito.mock(ApplicationRepository.class); - ApplicationService service = new ApplicationService(applicationRepository); + RestTemplate restTemplate = Mockito.mock(RestTemplate.class); + ApplicationService service = new ApplicationService(applicationRepository, restTemplate); Application application = new Application(ApplicationStatusEnum.ACCEPTED, "John", "Doe", LocalDate.now().minusYears(20), "john.doe@aaa.com", LocalDate.now()); diff --git a/notification/src/main/java/cz/muni/pa165/facade/NotificationFacade.java b/notification/src/main/java/cz/muni/pa165/facade/NotificationFacade.java index 95ef618..8f80200 100644 --- a/notification/src/main/java/cz/muni/pa165/facade/NotificationFacade.java +++ b/notification/src/main/java/cz/muni/pa165/facade/NotificationFacade.java @@ -1,9 +1,11 @@ package cz.muni.pa165.facade; -import cz.muni.pa165.generated.model.*; +import cz.muni.pa165.generated.model.ApplicationNotificationDto; +import cz.muni.pa165.generated.model.CarComponentNotificationDto; +import cz.muni.pa165.generated.model.ConfirmationDto; +import cz.muni.pa165.generated.model.NotificationDto; import cz.muni.pa165.service.NotificationService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @Service diff --git a/notification/src/main/java/cz/muni/pa165/rest/NotificationController.java b/notification/src/main/java/cz/muni/pa165/rest/NotificationController.java index e27025a..975e713 100644 --- a/notification/src/main/java/cz/muni/pa165/rest/NotificationController.java +++ b/notification/src/main/java/cz/muni/pa165/rest/NotificationController.java @@ -2,7 +2,10 @@ package cz.muni.pa165.rest; import cz.muni.pa165.facade.NotificationFacade; import cz.muni.pa165.generated.api.NotificationServiceApiDelegate; -import cz.muni.pa165.generated.model.*; +import cz.muni.pa165.generated.model.ApplicationNotificationDto; +import cz.muni.pa165.generated.model.CarComponentNotificationDto; +import cz.muni.pa165.generated.model.ConfirmationDto; +import cz.muni.pa165.generated.model.NotificationDto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/notification/src/main/resources/application.properties b/notification/src/main/resources/application.properties index a55abf0..67b74b1 100644 --- a/notification/src/main/resources/application.properties +++ b/notification/src/main/resources/application.properties @@ -1,5 +1,4 @@ server.port=8083 - spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=formula.team.management@gmail.com -- GitLab