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 e1616efff4d506b601288943b694e3cd295d0320..9113f55d6e41232aa18163acd24753af63aaaec9 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 bdb65551608d4e074bc350654d8b83f56d4be942..80616178099de6007f1c6f7aac3aa75689044186 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 c2bd8486b62f7b10c561130ba84af17b82e90cc5..4bfd428db5d6c690a6b9e88e30b7d6c7c7dddbc2 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 95ef6183441ac6620070b3204445b59e152c2911..8f802001e0360df82c238376ed98824ce4215da0 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 e27025aeb3563cf45324004c88166fc8828545fc..975e713dff0051c480f41672c3fd9e8b2d1a9f89 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 a55abf0effb80f1f5ed441d721f2b15afbafc178..67b74b143553fda6ca63c21b731f11201fa723e1 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