From 018556d332723a4a00d7de154be082737c202998 Mon Sep 17 00:00:00 2001 From: Oto Stanko <493068@fi.muni.cz> Date: Mon, 1 May 2023 15:21:33 +0200 Subject: [PATCH] Added error messages to carComponent-car pair service --- .../muni/pa165/car/config/PersistingCars.java | 6 +++- .../muni/pa165/car/restemplate/DbGetter.java | 32 +++++++++++++------ .../service/CarComponentPairServiceImpl.java | 24 +++++++++++--- .../pa165/car/service/CarServiceTests.java | 2 +- .../component/service/ComponentService.java | 3 ++ 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/car/src/main/java/cz/muni/pa165/car/config/PersistingCars.java b/car/src/main/java/cz/muni/pa165/car/config/PersistingCars.java index f624bf1f..fdcc50b4 100644 --- a/car/src/main/java/cz/muni/pa165/car/config/PersistingCars.java +++ b/car/src/main/java/cz/muni/pa165/car/config/PersistingCars.java @@ -60,7 +60,11 @@ public class PersistingCars { } private Optional<Long> getRandomComponentId() { - List<CarComponentResponseDto> allComponents = dbGetter.getAllComponentsFromDb(); + var response = dbGetter.getAllComponentsFromDb(); + if (response.isEmpty()) { + return Optional.empty(); + } + List<CarComponentResponseDto> allComponents = response.get(); if (allComponents.size() != 0) { Random random = new Random(); int index = random.ints(0, diff --git a/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java index d417c46a..6edaeabc 100644 --- a/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java +++ b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java @@ -4,8 +4,10 @@ import cz.muni.pa165.common_library.dtos.CarComponentResponseDto; import cz.muni.pa165.common_library.dtos.DriverInsightDto; import java.util.Arrays; import java.util.List; +import java.util.Optional; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; /** @@ -38,11 +40,16 @@ public class DbGetter { * @param id component id * @return Component object */ - public CarComponentResponseDto getComponentFromDb(Long id) { + public Optional<CarComponentResponseDto> getComponentFromDb(Long id) { String url = GET_COMPONENT_URL + id; - ResponseEntity<CarComponentResponseDto> response = - client.getForEntity(url, CarComponentResponseDto.class); - return response.getBody(); + ResponseEntity<CarComponentResponseDto> response; + try { + response = client.getForEntity(url, CarComponentResponseDto.class); + } catch (RestClientException e) { + e.printStackTrace(); + return Optional.empty(); + } + return Optional.ofNullable(response.getBody()); } /** @@ -50,13 +57,18 @@ public class DbGetter { * * @return List of all car components in database. */ - public List<CarComponentResponseDto> getAllComponentsFromDb() { + public Optional<List<CarComponentResponseDto>> getAllComponentsFromDb() { String url = GET_ALL_COMPONENTS; - var response = - client.getForEntity(url, CarComponentResponseDto[].class); - CarComponentResponseDto[] carComponents = response.getBody(); - assert carComponents != null; - return Arrays.stream(carComponents).toList(); + CarComponentResponseDto[] carComponents; + try { + var response = + client.getForEntity(url, CarComponentResponseDto[].class); + carComponents = response.getBody(); + } catch (RestClientException e) { + e.printStackTrace(); + return Optional.empty(); + } + return Optional.of(Arrays.stream(carComponents).toList()); } } diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java index bbe3fa2c..ce6ae529 100644 --- a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java +++ b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java @@ -46,7 +46,11 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { throw new DatabaseException("Component with id " + componentId + " already in use"); } var components = car.getComponents(); - CarComponentResponseDto carComponent = dbGetter.getComponentFromDb(componentId); + var response = dbGetter.getComponentFromDb(componentId); + if (response.isEmpty()) { + throw new DatabaseException("Component with id " + componentId + " could not be fetched"); + } + CarComponentResponseDto carComponent = response.get(); components.add(carComponent.getId()); car.setComponents(components); carRepository.save(car); @@ -75,7 +79,11 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { () -> new DatabaseException("Car not found")); var componentDtos = new ArrayList<CarComponentResponseDto>(); for (Long id : car.getComponents()) { - CarComponentResponseDto carComponent = dbGetter.getComponentFromDb(id); + var response = dbGetter.getComponentFromDb(id); + if (response.isEmpty()) { + throw new DatabaseException("Components could not be fetched from database"); + } + CarComponentResponseDto carComponent = response.get(); componentDtos.add( new CarComponentResponseDto( carComponent.getId(), @@ -95,7 +103,8 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { // get all the components of a given car var carComponents = getAllComponentsOfCar(carId); if (carComponents == null) { - return new ArrayList<>(); + throw new DatabaseException("Car with id " + carId + + " does not have any components assigned"); } // check if the given component is in the car boolean found = false; @@ -106,10 +115,15 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { } } if (!found) { - return new ArrayList<>(); + throw new DatabaseException("Car with id " + carId + " does not have component with id " + + componentId + " assigned to it"); } // get all the components from DB - List<CarComponentResponseDto> allComponents = dbGetter.getAllComponentsFromDb(); + var response = dbGetter.getAllComponentsFromDb(); + if (response.isEmpty()) { + throw new DatabaseException("Components could not be fetched from database"); + } + List<CarComponentResponseDto> allComponents = response.get(); CarComponentResponseDto requestedComponent = null; // check if the component is in the DB for (CarComponentResponseDto carComponent : allComponents) { diff --git a/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java b/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java index 0c085a41..19f90fc6 100644 --- a/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java +++ b/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java @@ -93,7 +93,7 @@ class CarServiceTests { CarComponentResponseDto carComponentDto = CarComponentResponseDto.builder().build(); given(dbGetter.getDriverFromDb(anyLong())).willReturn(driverInsightDto); - given(dbGetter.getComponentFromDb(anyLong())).willReturn(carComponentDto); + given(dbGetter.getComponentFromDb(anyLong())).willReturn(Optional.ofNullable(carComponentDto)); String response = mockMvc.perform(post("/car/") .contentType(MediaType.APPLICATION_JSON) diff --git a/component/src/main/java/cz/muni/pa165/component/service/ComponentService.java b/component/src/main/java/cz/muni/pa165/component/service/ComponentService.java index e098ae44..0b97e369 100644 --- a/component/src/main/java/cz/muni/pa165/component/service/ComponentService.java +++ b/component/src/main/java/cz/muni/pa165/component/service/ComponentService.java @@ -66,6 +66,9 @@ public class ComponentService implements ComponentServiceInterface { */ @Transactional public String deleteById(Long carComponentId) { + componentRepository.findById(carComponentId).orElseThrow( + () -> new DatabaseException("Car component with id: " + + carComponentId + " is not in the database.")); componentRepository.deleteById(carComponentId); return "Car component with id: " + carComponentId + "was successfully deleted"; } -- GitLab