diff --git a/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java b/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java index d2beea3ad986ed8802d02576a3885ece7e0399ba..f15e48c2b8569a653c035cfbcd210accda60eb87 100644 --- a/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java +++ b/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java @@ -25,10 +25,7 @@ public class CarRepository { public Optional<Car> assignDriverToCar(Long driverId, Long carId) { var car = new Car(); car.setId(carId); - CarConfig config = new CarConfig(); - car.setCarConfig(config); - var driver = - new Driver(); + var driver = new Driver(); driver.setId(driverId); driver.setName("Max"); driver.setSurname("Verstappen"); diff --git a/car/src/test/java/cz/muni/pa165/car/rest/DriverManagerControllerItTest.java b/car/src/test/java/cz/muni/pa165/car/rest/DriverManagerControllerItTest.java index 613d52e773f56877a75c97ffc22001bf8a5789ef..6cf909c531b516ca26858c26e9ab5538d8e624b4 100644 --- a/car/src/test/java/cz/muni/pa165/car/rest/DriverManagerControllerItTest.java +++ b/car/src/test/java/cz/muni/pa165/car/rest/DriverManagerControllerItTest.java @@ -39,7 +39,6 @@ class DriverManagerControllerItTest { Car carResponse = objectMapper.readValue(response, Car.class); Assertions.assertAll( () -> Assertions.assertEquals(car.getId(), carResponse.getId()), - () -> Assertions.assertEquals(car.getCarConfig(), carResponse.getCarConfig()), () -> Assertions.assertEquals(car.getDrivers(), carResponse.getDrivers()) ); } diff --git a/common_library/pom.xml b/common_library/pom.xml index 580c992879d8d47e7420a19fb743e07b53e5cfbc..e76ce03c68ab1470945e0329df81c2d202573d43 100644 --- a/common_library/pom.xml +++ b/common_library/pom.xml @@ -32,5 +32,13 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> </dependencies> -</project> \ No newline at end of file +</project> diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Car.java b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Car.java index 37a50c141233ee8376b9dec36b461b87dc4093a1..2536fb9898c870b2f0f60a0b96913ecb4501091a 100644 --- a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Car.java +++ b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Car.java @@ -1,9 +1,16 @@ package cz.muni.pa165.common_library.racecomponents; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; +import java.io.Serializable; import java.util.List; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -13,17 +20,29 @@ import lombok.NoArgsConstructor; * Class for Car instance. */ @Data +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder -public class Car { +@Entity +@Table(name = "car") +public class Car implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @NotNull - @Valid - private CarConfig carConfig; + //@NotNull + @OneToMany(fetch = FetchType.EAGER, + mappedBy = "id", + cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}) + private List<@Valid CarComponent> components; - @NotNull + //@NotNull + @OneToMany(fetch = FetchType.EAGER, + mappedBy = "id", + cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}) private List<@Valid Driver> drivers; + } + diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/CarComponent.java b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/CarComponent.java index 292793a7ab7c1af278c2b21b846bfee4c45ef481..789aacb569f72e37c0fa6802a2988fef3b560674 100644 --- a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/CarComponent.java +++ b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/CarComponent.java @@ -1,17 +1,34 @@ package cz.muni.pa165.common_library.racecomponents; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; +import java.io.Serializable; import java.math.BigDecimal; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * Component class. */ @Data -public abstract class CarComponent { +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "carcomponent") +public class CarComponent implements Serializable { + + @Id private Long id; + @NotNull + private String name; + @NotNull private BigDecimal weight; @@ -20,5 +37,7 @@ public abstract class CarComponent { @NotNull private String manufacturer; + } + diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Characteristic.java b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Characteristic.java index 5f067f092e1202c487f7d22d5b52a9af7951354d..8dbc7430406dcaee4222fc956b674ff8e9e52124 100644 --- a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Characteristic.java +++ b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Characteristic.java @@ -1,8 +1,11 @@ package cz.muni.pa165.common_library.racecomponents; +import jakarta.persistence.Embeddable; + /** * Characteristics of F1 drivers. */ +@Embeddable public enum Characteristic { AGGRESSIVENESS, CONSISTENCY, diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Driver.java b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Driver.java index 8902c36cf9c371b3de834f8f943297556c714062..d792d14d668f3fd72ec79bc49996df737ddbe845 100644 --- a/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Driver.java +++ b/common_library/src/main/java/cz/muni/pa165/common_library/racecomponents/Driver.java @@ -2,10 +2,13 @@ package cz.muni.pa165.common_library.racecomponents; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; +import java.io.Serializable; import java.util.Set; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -15,19 +18,23 @@ import lombok.NoArgsConstructor; * Driver Class. */ @Data -@Entity +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder -public class Driver { +@Entity +@Table(name = "driver") +public class Driver implements Serializable { @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull private String name; + @NotNull private String surname; + @NotNull private String nationality; @@ -36,6 +43,5 @@ public class Driver { @NotNull private boolean isMain; - } diff --git a/driver/pom.xml b/driver/pom.xml index a0d37f2a3365efec50a355d07c060f997a570aa0..c7efb5a8f4b2790287ea35bf26a6d747b5df74d6 100644 --- a/driver/pom.xml +++ b/driver/pom.xml @@ -16,10 +16,19 @@ <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> - <groupId>fi.muni</groupId> - <artifactId>common_library</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>2.1.214</version> + </dependency> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20210307</version> + </dependency> + <dependency> + <groupId>jakarta.validation</groupId> + <artifactId>jakarta.validation-api</artifactId> + <version>3.0.2</version> </dependency> <dependency> <groupId>org.springdoc</groupId> @@ -35,6 +44,12 @@ <artifactId>spring-data-jpa</artifactId> <version>3.0.2</version> </dependency> + <dependency> + <groupId>fi.muni</groupId> + <artifactId>common_library</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>compile</scope> + </dependency> </dependencies> <properties> diff --git a/driver/src/main/java/cz/muni/pa165/driver/App.java b/driver/src/main/java/cz/muni/pa165/driver/App.java index b58d4debbdc6de93f475d606d070fe460ef40c51..290e18c6f820434030f6c249abd3bde53db5b349 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/App.java +++ b/driver/src/main/java/cz/muni/pa165/driver/App.java @@ -2,11 +2,15 @@ package cz.muni.pa165.driver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; /** * Main app. */ -@SpringBootApplication +@SpringBootApplication(scanBasePackages = {"cz.muni.pa165.*"}) +@EnableJpaRepositories(basePackages = {"cz.muni.pa165.*"}) +@EntityScan("cz.muni.pa165.*") public class App { public static void main(String[] args) { diff --git a/driver/src/main/java/cz/muni/pa165/driver/api/CarDto.java b/driver/src/main/java/cz/muni/pa165/driver/api/CarDto.java index b0b858d71fded391e9aefeeb12993ff956a36a5e..f09919d4bff173d4607b44137a90d61a2e28555a 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/api/CarDto.java +++ b/driver/src/main/java/cz/muni/pa165/driver/api/CarDto.java @@ -2,27 +2,35 @@ package cz.muni.pa165.driver.api; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; +import java.util.List; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; - -import java.util.List; +import lombok.NoArgsConstructor; +import org.springframework.data.util.Pair; /** * Dto for Car entity. */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class CarDto { @NotNull @Schema(description = "car id", example = "1") - Long carId; + long id; @NotNull - @Schema(description = "config id", example = "1") - Long configId; + @Schema(description = "car's components ids and names", + example = "[]") + List<Pair<Long, String>> componentIdsNames; @NotNull - @Schema(description = "config id", example = "1") - List<Long> driversId; + @Schema(description = "car's drivers ids and names", + example = "[]") + List<Pair<Long, String>> driverIdsNames; + } + diff --git a/driver/src/main/java/cz/muni/pa165/driver/api/DriverCarDto.java b/driver/src/main/java/cz/muni/pa165/driver/api/DriverCarDto.java index 2e3b4c491d3e4efba26f6ebb17967e0d57f77676..4ca4a5081a6101eb64565722a68cecae3bd8aec0 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/api/DriverCarDto.java +++ b/driver/src/main/java/cz/muni/pa165/driver/api/DriverCarDto.java @@ -19,4 +19,8 @@ public class DriverCarDto { @NotNull @Schema(description = "car id", example = "1") Long carId; + + @Schema(description = "driver name", example = "1") + String driverName; } + diff --git a/driver/src/main/java/cz/muni/pa165/driver/api/DriverDto.java b/driver/src/main/java/cz/muni/pa165/driver/api/DriverDto.java index 94551178d18227cfe9e559ef7439768aa9a42edf..af9838231c8a62b029b8939b4bbb37485b6729e9 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/api/DriverDto.java +++ b/driver/src/main/java/cz/muni/pa165/driver/api/DriverDto.java @@ -1,44 +1,32 @@ package cz.muni.pa165.driver.api; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; - -import java.util.Set; +import lombok.NoArgsConstructor; /** * Dto for Driver entity. */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class DriverDto { @NotNull @Schema(description = "driver id", example = "1") - Long driverId; - - @NotNull - @NotBlank - @Schema(description = "driver first name", example = "Fernando") - String driverFirstName; + long id; @NotNull - @NotBlank - @Schema(description = "driver surname", example = "Alonso") - String driverSurName; + @Schema(description = "driver name", example = "Max") + String name; @NotNull - @NotBlank - @Schema(description = "driver nationality", example = "Spanish") - String driverNationality; + @Schema(description = "driver surname", example = "Verstappen") + String surname; - @NotNull - @Schema(description = "driver characteristics", example = "{AGGRESSIVENESS, CONSISTENCY}") - Set<String> driverCharacteristics; - - @NotNull - @Schema(description = "is driver a main driver", example = "true") - String driverIsMain; } + diff --git a/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarComponentRepository.java b/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarComponentRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..0701d3b757b9dbfbc2c80a218041890da8309fe4 --- /dev/null +++ b/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarComponentRepository.java @@ -0,0 +1,12 @@ +package cz.muni.pa165.driver.data.repository; + +import cz.muni.pa165.common_library.racecomponents.CarComponent; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * Repository for car config. + */ +@Repository +public interface CarComponentRepository extends JpaRepository<CarComponent, Long> { +} diff --git a/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarConfigRepository.java b/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarConfigRepository.java deleted file mode 100644 index 60d929fb2278dd6a9af79355a564dc560ee9be2e..0000000000000000000000000000000000000000 --- a/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarConfigRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package cz.muni.pa165.driver.data.repository; - -import cz.muni.pa165.common_library.racecomponents.CarConfig; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface CarConfigRepository extends JpaRepository<CarConfig, Long> { -} diff --git a/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarRepository.java b/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarRepository.java index 335817a570e81acd133077c7cdebf4b18b89a46e..a366121271d36d12730301323aa3c8c41fa04955 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarRepository.java +++ b/driver/src/main/java/cz/muni/pa165/driver/data/repository/CarRepository.java @@ -4,9 +4,6 @@ import cz.muni.pa165.common_library.racecomponents.Car; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.List; -import java.util.Optional; - /** * Repository for car. */ diff --git a/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java b/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java index a5ebd647b4e1a1adc7f19cb4d2ba14075bc62f19..8c41e4c4778b4a7a5b2467b6c74b9cd4ab940d99 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java +++ b/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java @@ -1,12 +1,11 @@ package cz.muni.pa165.driver.data.repository; import cz.muni.pa165.common_library.racecomponents.Driver; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.util.List; - /** * Repository for driver. */ diff --git a/driver/src/main/java/cz/muni/pa165/driver/rest/CarController.java b/driver/src/main/java/cz/muni/pa165/driver/rest/CarController.java index b994554fa98c10322640559de0bbffc1a37c7019..a61c5dec29677f510c07191641c8be95e0d7f6c2 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/rest/CarController.java +++ b/driver/src/main/java/cz/muni/pa165/driver/rest/CarController.java @@ -1,5 +1,14 @@ package cz.muni.pa165.driver.rest; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +/** + * Rest controller for car. + */ +@RestController +@RequestMapping(path = "/car") +@Validated public class CarController { } diff --git a/driver/src/main/java/cz/muni/pa165/driver/rest/DriverController.java b/driver/src/main/java/cz/muni/pa165/driver/rest/DriverController.java index 1adc77ee4280b8a46ff84012dd499df26530ea71..995f031c74e6c521cda156e2f2f2c93997bd465a 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/rest/DriverController.java +++ b/driver/src/main/java/cz/muni/pa165/driver/rest/DriverController.java @@ -2,9 +2,10 @@ package cz.muni.pa165.driver.rest; import cz.muni.pa165.common_library.racecomponents.Driver; import cz.muni.pa165.driver.api.DriverDto; -import cz.muni.pa165.driver.service.IDriverService; +import cz.muni.pa165.driver.service.DriverService; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.Valid; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -18,21 +19,18 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** - * Controller for initialization and destruction of drivers. + * Rest controller for driver. */ @RestController @RequestMapping(path = "/driver") @Validated - public class DriverController { - private final IDriverService driverService; + private final DriverService driverService; @Autowired - public DriverController(IDriverService driverService) { + public DriverController(DriverService driverService) { this.driverService = driverService; } @@ -62,13 +60,14 @@ public class DriverController { @Operation(summary = "Get all the signed driver of the team") @GetMapping(path = "/get/all", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity<List<Driver>> getAllDrivers() { + public ResponseEntity<List<DriverDto>> getAllDrivers() { return ResponseEntity.ok(driverService.getAllDrivers()); } + @Operation(summary = "Get a signed driver specified by his id") @GetMapping(path = "/get/id={id}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity<Driver> getDriverById(@PathVariable("id") Long id) { + public ResponseEntity<DriverDto> getDriverById(@PathVariable("id") Long id) { return ResponseEntity.ok(driverService.getDriverById(id)); } } diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/CarService.java b/driver/src/main/java/cz/muni/pa165/driver/service/CarService.java index 77a13ff99b706a94520e28b8ca1bff6b2b82fca8..0bd0ec51c6938111f79c507d9c2b4017e5f69836 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/service/CarService.java +++ b/driver/src/main/java/cz/muni/pa165/driver/service/CarService.java @@ -1,47 +1,26 @@ package cz.muni.pa165.driver.service; import cz.muni.pa165.common_library.racecomponents.Car; -import cz.muni.pa165.common_library.racecomponents.Driver; import cz.muni.pa165.driver.api.CarDto; -import cz.muni.pa165.driver.data.repository.CarConfigRepository; -import cz.muni.pa165.driver.data.repository.CarRepository; -import cz.muni.pa165.driver.data.repository.DriverRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import java.util.stream.Collectors; +/** + * Car service interface. + */ +public interface CarService { -@Service -public class CarService implements ICarService { + /** + * Converts a car dto into car class. + * + * @param carDto car dto object + * @return car class object + */ + Car convertDtoToCar(CarDto carDto); - private final DriverRepository driverRepository; - private final CarRepository carRepository; - private final CarConfigRepository carConfigRepository; - - @Autowired - CarService(DriverRepository driverRepository, CarRepository carRepository, - CarConfigRepository carConfigRepository) { - this.driverRepository = driverRepository; - this.carRepository = carRepository; - this.carConfigRepository = carConfigRepository; - } - - private Car convertDtoToCar(CarDto carDto) { - return Car.builder() - .id(carDto.getCarId()) - .carConfig(carConfigRepository.findById(carDto.getConfigId()).get()) - .drivers(driverRepository.findAllById(carDto.getDriversId())) - .build(); - } - - private CarDto convertCarToDto(Car car) { - return CarDto.builder() - .carId(car.getId()) - .configId(car.getCarConfig().getId()) - .driversId(car.getDrivers() - .stream() - .map(Driver::getId) - .collect(Collectors.toList())) - .build(); - } + /** + * Converts a car class object to car dto object. + * + * @param car car class object + * @return car dto object + */ + CarDto convertCarToDto(Car car); } diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/CarServiceImpl.java b/driver/src/main/java/cz/muni/pa165/driver/service/CarServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..b842ee36aa34af678480f3011884e69a3ea18c40 --- /dev/null +++ b/driver/src/main/java/cz/muni/pa165/driver/service/CarServiceImpl.java @@ -0,0 +1,84 @@ +package cz.muni.pa165.driver.service; + +import cz.muni.pa165.common_library.exceptions.DatabaseException; +import cz.muni.pa165.common_library.racecomponents.Car; +import cz.muni.pa165.common_library.racecomponents.CarComponent; +import cz.muni.pa165.common_library.racecomponents.Driver; +import cz.muni.pa165.driver.api.CarDto; +import cz.muni.pa165.driver.data.repository.CarComponentRepository; +import cz.muni.pa165.driver.data.repository.CarRepository; +import cz.muni.pa165.driver.data.repository.DriverRepository; +import java.util.ArrayList; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.util.Pair; +import org.springframework.stereotype.Service; + +/** + * Implementation of car service. + */ +@Service +public class CarServiceImpl implements CarService { + + private final DriverRepository driverRepository; + private final CarRepository carRepository; + private final CarComponentRepository carComponentRepository; + + @Autowired + CarServiceImpl(DriverRepository driverRepository, CarRepository carRepository, + CarComponentRepository carComponentRepository) { + this.driverRepository = driverRepository; + this.carRepository = carRepository; + this.carComponentRepository = carComponentRepository; + } + + /** + * Converts a car dto into car class. + * + * @param carDto car dto object + * @return car class object + */ + public Car convertDtoToCar(CarDto carDto) { + var car = Car.builder() + .id(carDto.getId()) + .build(); + + var components = new ArrayList<CarComponent>(); + for (Pair<Long, String> componentPair : carDto.getComponentIdsNames()) { + Long id = componentPair.getFirst(); + components.add(carComponentRepository.findById(id).orElseThrow( + () -> new DatabaseException("Component not found") + )); + } + car.setComponents(components); + var drivers = new ArrayList<Driver>(); + for (Pair<Long, String> driverPair : carDto.getDriverIdsNames()) { + Long id = driverPair.getFirst(); + drivers.add(driverRepository.findById(id).orElseThrow( + () -> new DatabaseException("Driver not found") + )); + } + car.setDrivers(drivers); + return car; + + } + + /** + * Converts a car class object to car dto object. + * + * @param car car class object + * @return car dto object + */ + public CarDto convertCarToDto(Car car) { + return CarDto.builder() + .id(car.getId()) + .componentIdsNames(car.getComponents() + .stream() + .map(carComponent -> Pair.of(carComponent.getId(), carComponent.getName())) + .toList()) + .driverIdsNames(car.getDrivers() + .stream() + .map(driver -> Pair.of(driver.getId(), driver.getName())) + .toList()) + .build(); + } +} diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/DriverService.java b/driver/src/main/java/cz/muni/pa165/driver/service/DriverService.java index 861cd9e2268fde32015249f2088c983a33d555c1..5aa24549943ff082239744eda7538a2893700350 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/service/DriverService.java +++ b/driver/src/main/java/cz/muni/pa165/driver/service/DriverService.java @@ -1,87 +1,67 @@ package cz.muni.pa165.driver.service; -import cz.muni.pa165.common_library.exceptions.DatabaseException; -import cz.muni.pa165.common_library.exceptions.ResourceNotFoundException; -import cz.muni.pa165.common_library.racecomponents.Characteristic; import cz.muni.pa165.common_library.racecomponents.Driver; import cz.muni.pa165.driver.api.DriverDto; -import cz.muni.pa165.driver.data.repository.CarRepository; -import cz.muni.pa165.driver.data.repository.DriverRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import java.util.List; -import java.util.stream.Collectors; /** - * Service for initialization and destruction of drivers. + * Driver service interface. */ -@Service -public class DriverService implements IDriverService { - - private final DriverRepository driverRepository; - private final CarRepository carRepository; +public interface DriverService { - @Autowired - DriverService(DriverRepository driverRepository, CarRepository carRepository) { - this.driverRepository = driverRepository; - this.carRepository = carRepository; - } + /** + * Adds given driver to database. + * + * @param driverDto driver dto object + * @return added driver class object + */ + Driver addDriver(DriverDto driverDto); - private Driver convertDtoToDriver(DriverDto driverDto) { - return Driver.builder() - .id(driverDto.getDriverId()) - .name(driverDto.getDriverFirstName()) - .surname(driverDto.getDriverSurName()) - .nationality(driverDto.getDriverNationality()) - .isMain(Boolean.parseBoolean(driverDto.getDriverIsMain())) - .characteristics(driverDto.getDriverCharacteristics() - .stream() - .map(Characteristic::valueOf) - .collect(Collectors.toSet())) - .build(); - } + /** + * Updates driver with given id by given data. + * + * @param id driver id + * @param driverDto data to be updated + * @return updated driver class object + */ + Driver updateDriverById(Long id, DriverDto driverDto); - private DriverDto convertDriverToDto(Driver driver) { - return DriverDto.builder() - .driverId(driver.getId()) - .driverFirstName(driver.getName()) - .driverSurName(driver.getSurname()) - .driverNationality(driver.getNationality()) - .driverIsMain(String.valueOf(driver.isMain())) - .driverCharacteristics(driver.getCharacteristics() - .stream() - .map(Characteristic::name) - .collect(Collectors.toSet())) - .build(); - } + /** + * Removes driver with given id. + * + * @param id driver id + * @return removed driver class object + */ + Driver removeDriverById(Long id); - public Driver addDriver(DriverDto driverDto) { - return driverRepository.save(convertDtoToDriver(driverDto)); - } + /** + * Gets all stored drivers. + * + * @return all stored drivers list + */ + List<DriverDto> getAllDrivers(); - public Driver updateDriverById(Long id, DriverDto driverDto) { - var oldObj = driverRepository.findById(id).get(); - var newObj = convertDtoToDriver(driverDto); - oldObj.setName(newObj.getName()); - oldObj.setSurname(newObj.getSurname()); - oldObj.setCharacteristics(newObj.getCharacteristics()); - oldObj.setMain(newObj.isMain()); - return driverRepository.save(oldObj); - } + /** + * Gets driver with given id. + * + * @param id driver id + * @return found driver class object + */ + DriverDto getDriverById(Long id); - public Driver removeDriverById(Long id) { - var found = driverRepository.findById(id).get(); - driverRepository.delete(found); - return found; - } + /** + * Converts driver class object into dto object. + * + * @param driver driver class object + * @return driver dto object + */ + DriverDto convertDriverToDto(Driver driver); - public List<Driver> getAllDrivers() { - return driverRepository.findAll(); - } - - public Driver getDriverById(Long id) { - return driverRepository.findById(id).get(); - } + /** + * Converts driver dto object into driver class object. + * + * @param driverDto driver dto object + * @return driver class object + */ + Driver convertDtoToDriver(DriverDto driverDto); } - diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/DriverServiceImpl.java b/driver/src/main/java/cz/muni/pa165/driver/service/DriverServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..dc0f5ee2c0c1240e0dc116768d86b090634f94cf --- /dev/null +++ b/driver/src/main/java/cz/muni/pa165/driver/service/DriverServiceImpl.java @@ -0,0 +1,122 @@ +package cz.muni.pa165.driver.service; + +import cz.muni.pa165.common_library.exceptions.DatabaseException; +import cz.muni.pa165.common_library.racecomponents.Driver; +import cz.muni.pa165.driver.api.DriverDto; +import cz.muni.pa165.driver.data.repository.CarRepository; +import cz.muni.pa165.driver.data.repository.DriverRepository; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * Implementation of driver service. + */ +@Service +public class DriverServiceImpl implements DriverService { + + private final DriverRepository driverRepository; + private final CarRepository carRepository; + + @Autowired + DriverServiceImpl(DriverRepository driverRepository, CarRepository carRepository) { + this.driverRepository = driverRepository; + this.carRepository = carRepository; + } + + /** + * Converts driver dto object into driver class object. + * + * @param driverDto driver dto object + * @return driver class object + */ + public Driver convertDtoToDriver(DriverDto driverDto) { + var driver = Driver.builder() + .id(driverDto.getId()) + .name(driverDto.getName()) + .surname(driverDto.getSurname()); + var db = driverRepository.findById(driverDto.getId()).orElseThrow( + () -> new DatabaseException("Driver not found.")); + driver.nationality(db.getNationality()); + driver.isMain(db.isMain()); + driver.characteristics(db.getCharacteristics()); + return driver.build(); + } + + /** + * Converts driver class object into dto object. + * + * @param driver driver class object + * @return driver dto object + */ + public DriverDto convertDriverToDto(Driver driver) { + return DriverDto.builder() + .id(driver.getId()) + .name(driver.getName()) + .surname(driver.getSurname()) + .build(); + } + + /** + * Adds given driver to database. + * + * @param driverDto driver dto object + * @return added driver class object + */ + public Driver addDriver(DriverDto driverDto) { + return driverRepository.save(convertDtoToDriver(driverDto)); + } + + /** + * Updates driver with given id by given data. + * + * @param id driver id + * @param driverDto data to be updated + * @return updated driver class object + */ + public Driver updateDriverById(Long id, DriverDto driverDto) { + var oldObj = driverRepository.findById(id).get(); + var newObj = convertDtoToDriver(driverDto); + oldObj.setName(newObj.getName()); + oldObj.setSurname(newObj.getSurname()); + oldObj.setCharacteristics(newObj.getCharacteristics()); + oldObj.setMain(newObj.isMain()); + return driverRepository.save(oldObj); + } + + /** + * Removes driver with given id. + * + * @param id driver id + * @return removed driver class object + */ + public Driver removeDriverById(Long id) { + var found = driverRepository.findById(id).get(); + driverRepository.delete(found); + return found; + } + + /** + * Gets all stored drivers. + * + * @return all stored drivers list + */ + public List<DriverDto> getAllDrivers() { + return driverRepository.findAll() + .stream() + .map(this::convertDriverToDto) + .collect(Collectors.toList()); + } + + /** + * Gets driver with given id. + * + * @param id driver id + * @return found driver class object + */ + public DriverDto getDriverById(Long id) { + return convertDriverToDto(driverRepository.findById(id).get()); + } +} + diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/ICarService.java b/driver/src/main/java/cz/muni/pa165/driver/service/ICarService.java deleted file mode 100644 index 0731d41430a82f19c99779c19b9197b938f8cf59..0000000000000000000000000000000000000000 --- a/driver/src/main/java/cz/muni/pa165/driver/service/ICarService.java +++ /dev/null @@ -1,5 +0,0 @@ -package cz.muni.pa165.driver.service; - - -public interface ICarService { -} diff --git a/driver/src/main/java/cz/muni/pa165/driver/service/IDriverService.java b/driver/src/main/java/cz/muni/pa165/driver/service/IDriverService.java deleted file mode 100644 index 3424b921ca480e88e23ec1d16535c6392bcd89ee..0000000000000000000000000000000000000000 --- a/driver/src/main/java/cz/muni/pa165/driver/service/IDriverService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cz.muni.pa165.driver.service; - -import cz.muni.pa165.common_library.racecomponents.Driver; -import cz.muni.pa165.driver.api.DriverDto; - -import java.util.List; - - -public interface IDriverService { - - Driver addDriver(DriverDto driverDto); - - Driver updateDriverById(Long id, DriverDto driverDto); - - Driver removeDriverById(Long id); - - List<Driver> getAllDrivers(); - - Driver getDriverById(Long id); -} diff --git a/driver/src/main/resources/application.yml b/driver/src/main/resources/application.yml index 389724063bd2a7c1167d286afad930ed5b30b13e..142acbe921b9fd92cc99c90489970ef5e6af82ee 100644 --- a/driver/src/main/resources/application.yml +++ b/driver/src/main/resources/application.yml @@ -8,3 +8,15 @@ springdoc: path: /openapi swagger-ui: path: /swagger-ui.html + +spring: + jpa: + open-in-view: false + database-platform: org.hibernate.dialect.H2Dialect + hibernate: + ddl-auto: create-drop + datasource: + url: jdbc:h2:mem:race;MODE=PostgreSQL + driverClassName: org.h2.Driver + username: admin + password: admin diff --git a/driver/src/test/java/cz/muni/pa165/driver/rest/DriverInitControllerTest.java b/driver/src/test/java/cz/muni/pa165/driver/rest/DriverInitControllerTest.java index 5afbf9033302677d2c6150de17b690f8dcbe3f09..ffc54109a36c4a23735b55093dc244b290d08616 100644 --- a/driver/src/test/java/cz/muni/pa165/driver/rest/DriverInitControllerTest.java +++ b/driver/src/test/java/cz/muni/pa165/driver/rest/DriverInitControllerTest.java @@ -40,7 +40,7 @@ // .contentType(MediaType.APPLICATION_JSON) // .content(objectMapper.writeValueAsString(driver))) // .andExpect(status().isOk()) -// .andReturn().getResponse().getContentAsString(); +// .andReturn(). ().getContentAsString(); // Driver driverController = objectMapper.readValue(response, Driver.class); // assertingDriver(driverService, driverController); // }