diff --git a/.gitignore b/.gitignore index 7ed0d6b679399a08baa8c4e3d4ee2f95d898f0e5..66cba166c656cd93079d45dcd0c15921d3319d5f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ target/ !**/src/main/**/target/ !**/src/test/**/target/ +output-data/ + ### STS ### .apt_generated .classpath diff --git a/core/src/main/java/cz/muni/pa165/data/model/Car.java b/core/src/main/java/cz/muni/pa165/data/model/Car.java index 7bc7ff16dfa0666c31be90f237e7bcfd82355009..b1e9cee840e2a775f7485edc42405a296a184ad2 100644 --- a/core/src/main/java/cz/muni/pa165/data/model/Car.java +++ b/core/src/main/java/cz/muni/pa165/data/model/Car.java @@ -16,14 +16,12 @@ public class Car extends DomainObject<Long> implements Serializable { @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "driver_id") @Nullable - @JsonManagedReference private Driver driver; @OneToMany(fetch = FetchType.LAZY, mappedBy = "car", cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}) @Nonnull - @JsonManagedReference private Set<CarComponent> components; public Car() { diff --git a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java index 068b397de21927684429b764d7e5ab2ccd8134d6..f980efdc69661c0e740b19d4074ce0040413e355 100644 --- a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java +++ b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java @@ -1,6 +1,6 @@ package cz.muni.pa165.data.model; -import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import cz.muni.pa165.data.enums.ComponentTypeEnum; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; @@ -32,7 +32,7 @@ public class CarComponent extends DomainObject<Long> implements Serializable { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "car_id") @Nullable - @JsonBackReference + @JsonIgnore private Car car; public CarComponent() { diff --git a/core/src/main/java/cz/muni/pa165/data/model/Driver.java b/core/src/main/java/cz/muni/pa165/data/model/Driver.java index 8bf59f42d0e06727262661bc2332759e68ebd639..58977ff6e11aa090d17b2921093393ee553bd919 100644 --- a/core/src/main/java/cz/muni/pa165/data/model/Driver.java +++ b/core/src/main/java/cz/muni/pa165/data/model/Driver.java @@ -1,6 +1,6 @@ package cz.muni.pa165.data.model; -import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import cz.muni.pa165.data.enums.CharacteristicsEnum; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; @@ -48,7 +48,7 @@ public class Driver extends DomainObject<Long> implements Serializable { mappedBy = "driver", cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE}) @Nullable - @JsonBackReference + @JsonIgnore private Car car; public Driver() { diff --git a/core/src/main/java/cz/muni/pa165/service/CarService.java b/core/src/main/java/cz/muni/pa165/service/CarService.java index 171f5abf830ad943a7eb4b244c98d6353c0a2383..60052f1616e2383b9eb05358af2785eebf922fdf 100644 --- a/core/src/main/java/cz/muni/pa165/service/CarService.java +++ b/core/src/main/java/cz/muni/pa165/service/CarService.java @@ -11,16 +11,17 @@ import cz.muni.pa165.exceptions.ResourceNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.core.io.Resource; import org.springframework.web.client.RestClientException; import org.springframework.web.reactive.function.client.WebClient; +import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -184,11 +185,7 @@ public class CarService extends DomainService<Car> { .contentType(MediaType.APPLICATION_JSON) .bodyValue(visualization) .retrieve() - .bodyToMono(new ParameterizedTypeReference<Map<String, Object>>() { - }) - .doOnError(error -> { - throw new RestClientException("Failed to send POST request", error); - }) + .bodyToMono(Resource.class) .block(); } } diff --git a/visualization/openapi.yaml b/visualization/openapi.yaml index 355209dfb35d510662d5fc6e04313f6f278ac3f2..e0246f24960d10975d6d5f686be76e322f9f2ca3 100644 --- a/visualization/openapi.yaml +++ b/visualization/openapi.yaml @@ -155,7 +155,12 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/CarDto' + type: object + properties: + car: + $ref: '#/components/schemas/CarDto' + required: + - car responses: "200": description: OK 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 71e84077d9b553cd27327d4a8ede576a4bf7719c..155ca6fef900ee31e730efd08456ef296f9e554f 100644 --- a/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java +++ b/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java @@ -3,6 +3,7 @@ package cz.muni.pa165.rest; import cz.muni.pa165.facade.VisualizationFacade; import cz.muni.pa165.generated.api.VisualizationApiDelegate; import cz.muni.pa165.generated.model.CarDto; +import cz.muni.pa165.generated.model.GenerateCarPdfRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,12 +28,13 @@ public class VisualizationController implements VisualizationApiDelegate { } @Override - public ResponseEntity<Resource> generateCarPdf(CarDto carDto) { + public ResponseEntity<Resource> generateCarPdf(GenerateCarPdfRequest generateCarPdfRequest) { log.debug("generateCarPdf() called"); try { - var resource = visualizationFacade.generateCarPdf(carDto); + var resource = visualizationFacade.generateCarPdf(generateCarPdfRequest.getCar()); return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=generated.pdf") + .header(HttpHeaders.CONTENT_DISPOSITION, + String.format("attachment; filename=car-%s.pdf", generateCarPdfRequest.getCar().getId())) .contentType(MediaType.APPLICATION_PDF) .contentLength(resource.contentLength()) .body(resource); diff --git a/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java b/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java index e393143c321aaeb2293c116a61fea6fa95003f55..472dd7f5db2b2d87021cb022d98a26a659823e00 100644 --- a/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java +++ b/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java @@ -14,7 +14,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Objects; @Service public class VisualizationService {