diff --git a/core/src/main/java/cz/muni/pa165/service/DriverService.java b/core/src/main/java/cz/muni/pa165/service/DriverService.java index b4b9aa8d4057cbe61490ff14ca0f86659b1ad1d6..33359e94acc730fa99aa5dc5c2fb7fb40fbc81ba 100644 --- a/core/src/main/java/cz/muni/pa165/service/DriverService.java +++ b/core/src/main/java/cz/muni/pa165/service/DriverService.java @@ -4,11 +4,20 @@ import cz.muni.pa165.data.model.Driver; import cz.muni.pa165.data.repository.DriverRepository; import cz.muni.pa165.exceptions.BadRequestException; 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.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -17,19 +26,35 @@ import java.util.Optional; @Service public class DriverService extends DomainService<Driver> { + private static final Logger log = LoggerFactory.getLogger(DriverService.class); + private final DriverRepository driverRepository; + private final RestTemplate restTemplate; + + private static final String VISUALIZATION_MODULE_URL = "http://localhost:8082/visualization"; + @Autowired - public DriverService(DriverRepository repository) { + public DriverService(DriverRepository repository, RestTemplate restTemplate) { super(repository, Driver.class); driverRepository = repository; + this.restTemplate = restTemplate; } @Transactional(readOnly = true) public Driver findById(Long id) { - return driverRepository.findById(id) - .orElseThrow(() -> - new ResourceNotFoundException(entityClass, id)); + Optional<Driver> dbDriver = driverRepository.findById(id); + if (dbDriver.isEmpty()) { + throw new ResourceNotFoundException(entityClass, id); + } + + try { + sendPostRequest(dbDriver.get()); + } catch (RestClientException | IllegalArgumentException e) { + log.debug(String.format("The visualization module is not reachable on the URL: %s", VISUALIZATION_MODULE_URL)); + } + + return dbDriver.get(); } public Driver update(Long id, Driver driver) { @@ -66,5 +91,17 @@ public class DriverService extends DomainService<Driver> { repository.delete(driverFromDb.get()); } + + private void sendPostRequest(Driver driver) { + Map<String, Object> body = new HashMap<>(); + body.put("data", driver.toString()); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, headers); + restTemplate.postForObject(VISUALIZATION_MODULE_URL, request, String.class); + + log.debug(String.format("Sent request %s to %s.", request, VISUALIZATION_MODULE_URL)); + } } diff --git a/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java b/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java index 842f2678ada8eec16bb2ff1eee257e473ad7d532..86bab1676609ad09f9f0a7e6fea7035972c1d8fa 100644 --- a/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java +++ b/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java @@ -9,6 +9,7 @@ import cz.muni.pa165.exceptions.BadRequestException; import cz.muni.pa165.exceptions.ResourceNotFoundException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestTemplate; import java.time.LocalDate; import java.util.HashSet; @@ -22,11 +23,13 @@ import static org.mockito.Mockito.*; class DriverServiceTest { private DriverService driverService; private DriverRepository driverRepository; + private RestTemplate restTemplate; @BeforeEach void setUp() { driverRepository = mock(DriverRepository.class); - driverService = new DriverService(driverRepository); + restTemplate = mock(RestTemplate.class); + driverService = new DriverService(driverRepository, restTemplate); } @Test diff --git a/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java b/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java index 9c976ef2503960a56b93a6cd7e5b4a2e87766283..682880b60ce5c803140435a2ef19c5b80ae1dc63 100644 --- a/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java +++ b/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java @@ -3,12 +3,15 @@ package cz.muni.pa165.rest; import cz.muni.pa165.generated.api.VisualizationApiDelegate; import cz.muni.pa165.generated.model.VisualizationSchemaCreateDto; import cz.muni.pa165.generated.model.VisualizationSchemaDto; +import jakarta.validation.constraints.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import java.sql.Driver; + @Component public class VisualizationController implements VisualizationApiDelegate { private static final Logger log = LoggerFactory.getLogger(VisualizationController.class); @@ -17,7 +20,7 @@ public class VisualizationController implements VisualizationApiDelegate { public ResponseEntity<VisualizationSchemaDto> getVisualization(VisualizationSchemaCreateDto visualizationSchemaCreateDto) { log.debug("getVisualization() called"); - return new ResponseEntity<>(new VisualizationSchemaDto().message("--VISUALIZATION--"), HttpStatus.OK); + return new ResponseEntity<>(new VisualizationSchemaDto().message("--VISUALIZATION--" + visualizationSchemaCreateDto.getData()), HttpStatus.OK); } } diff --git a/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java b/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java index cfadef61245d7e5e1b4f6103ca82302e28d4f4c3..4addd5d6549a4c890c4cffcca28bdd1c32b67fa3 100644 --- a/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java +++ b/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java @@ -41,7 +41,7 @@ class IntegrationTests { .andReturn().getResponse().getContentAsString(); log.info("response: {}", response); - String expectedResponse = "{\"message\":\"--VISUALIZATION--\"}"; + String expectedResponse = "{\"message\":\"--VISUALIZATION--Hello\"}"; assertEquals(expectedResponse, response); } diff --git a/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java b/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java index 892a522d45caed49d82661e0aa27e547238e1f3f..fd5ca2db5db472fa9abb7e85b075f3cb068e7c46 100644 --- a/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java +++ b/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java @@ -25,6 +25,6 @@ class VisualizationControllerTest { ResponseEntity<VisualizationSchemaDto> responseEntity = visualizationController.getVisualization(new VisualizationSchemaCreateDto().data("test")); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); assertNotNull(responseEntity.getBody()); - assertEquals("--VISUALIZATION--", responseEntity.getBody().getMessage()); + assertEquals("--VISUALIZATION--test", responseEntity.getBody().getMessage()); } } \ No newline at end of file