Skip to content
Snippets Groups Projects
Commit d8056e04 authored by Viceníková Jitka's avatar Viceníková Jitka
Browse files

Send notifications from application module

parent bb365162
No related branches found
No related tags found
2 merge requests!54Merge develop into main,!40Fix notification module
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
......@@ -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);
}
}
......@@ -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());
......
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
......
......@@ -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;
......
server.port=8083
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=formula.team.management@gmail.com
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment