diff --git a/LocationDTO.java b/LocationDTO.java
new file mode 100644
index 0000000..e13247b
--- /dev/null
+++ b/LocationDTO.java
@@ -0,0 +1,81 @@
+package de.avatic.lcc.dto.generic;
+
+import java.util.Objects;
+
+/**
+ * Represents a geographical location with latitude and longitude.
+ * This immutable DTO (Data Transfer Object) is used to transfer location data across system layers.
+ */
+public class LocationDTO {
+
+ /**
+ * The latitude of the location.
+ * Positive values indicate north and negative values indicate south.
+ */
+ private final double latitude;
+
+ /**
+ * The longitude of the location.
+ * Positive values indicate east and negative values indicate west.
+ */
+ private final double longitude;
+
+ /**
+ * Constructs a new {@code LocationDTO} with the specified latitude and longitude.
+ *
+ * @param latitude the latitude of the location, where north is positive and south is negative
+ * @param longitude the longitude of the location, where east is positive and west is negative
+ */
+ public LocationDTO(double latitude, double longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ /**
+ * Default constructor for creating a {@code LocationDTO} at origin (0,0).
+ * Required for frameworks that use default constructors.
+ */
+ public LocationDTO() {
+ this(0.0, 0.0);
+ }
+
+ /**
+ * Gets the latitude of the location.
+ *
+ * @return the latitude, where positive values indicate north and negative values indicate south
+ */
+ public double getLatitude() {
+ return latitude;
+ }
+
+ /**
+ * Gets the longitude of the location.
+ *
+ * @return the longitude, where positive values indicate east and negative values indicate west
+ */
+ public double getLongitude() {
+ return longitude;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ LocationDTO that = (LocationDTO) o;
+ return Double.compare(that.latitude, latitude) == 0 &&
+ Double.compare(that.longitude, longitude) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(latitude, longitude);
+ }
+
+ @Override
+ public String toString() {
+ return "LocationDTO{" +
+ "latitude=" + latitude +
+ ", longitude=" + longitude +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b1c9d2f..8113385 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
org.springframework.boot
- spring-boot-starter-data-jdbc
+ spring-boot-starter-jdbc
org.springframework.boot
@@ -80,6 +80,14 @@
spring-security-test
test
+
+ org.apache.poi
+ poi
+
+
+ org.apache.poi
+ poi-ooxml
+
diff --git a/src/main/java/de/avatic/lcc/LccConfig.java b/src/main/java/de/avatic/lcc/LccConfig.java
new file mode 100644
index 0000000..5f4c41a
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/LccConfig.java
@@ -0,0 +1,10 @@
+package de.avatic.lcc;
+
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class LccConfig {
+
+
+
+}
diff --git a/src/main/java/de/avatic/lcc/config/ControllerConfig.java b/src/main/java/de/avatic/lcc/config/ControllerConfig.java
new file mode 100644
index 0000000..593a0a0
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/config/ControllerConfig.java
@@ -0,0 +1,17 @@
+package de.avatic.lcc.config;
+
+import org.springframework.beans.propertyeditors.StringTrimmerEditor;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.InitBinder;
+
+
+@ControllerAdvice
+public class ControllerConfig {
+
+ @InitBinder
+ public void initBinder(final WebDataBinder binder) {
+ binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/controller/GlobalExceptionHandler.java b/src/main/java/de/avatic/lcc/controller/GlobalExceptionHandler.java
index 1dd8b50..22b8183 100644
--- a/src/main/java/de/avatic/lcc/controller/GlobalExceptionHandler.java
+++ b/src/main/java/de/avatic/lcc/controller/GlobalExceptionHandler.java
@@ -2,7 +2,7 @@ package de.avatic.lcc.controller;
import de.avatic.lcc.dto.error.ErrorDTO;
import de.avatic.lcc.dto.error.ErrorResponseDTO;
-import de.avatic.lcc.util.InvalidArgumentException;
+import de.avatic.lcc.util.exception.clienterror.InvalidArgumentException;
import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -50,9 +50,17 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class)
- public String handleConstraintViolation(ConstraintViolationException exception) { //
- // TODO you can choose to return your custom object here, which will then get transformed to json/xml etc.
- return "Sorry, that was not quite right: " + exception.getMessage();
+ public ResponseEntity handleConstraintViolation(ConstraintViolationException exception) { //
+
+ ErrorDTO error = new ErrorDTO(
+ "BAD_REQUEST",
+ exception.getMessage(),
+ new HashMap<>() {{
+ put("errorMessage", exception.getStackTrace());
+ }}
+ );
+
+ return new ResponseEntity<>(new ErrorResponseDTO(error), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(Exception.class)
diff --git a/src/main/java/de/avatic/lcc/controller/bulk/BulkOperationController.java b/src/main/java/de/avatic/lcc/controller/bulk/BulkOperationController.java
new file mode 100644
index 0000000..265d52c
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/bulk/BulkOperationController.java
@@ -0,0 +1,62 @@
+package de.avatic.lcc.controller.bulk;
+
+
+import de.avatic.lcc.dto.bulk.BulkFileType;
+import de.avatic.lcc.service.bulk.BulkExportService;
+import de.avatic.lcc.service.bulk.BulkFileProcessingService;
+import de.avatic.lcc.service.bulk.TemplateGenerationService;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+@RestController
+@RequestMapping("/api/bulk")
+public class BulkOperationController {
+
+ private final BulkFileProcessingService bulkProcessingService;
+ private final TemplateGenerationService templateGenerationService;
+ private final BulkExportService bulkExportService;
+
+ public BulkOperationController(BulkFileProcessingService bulkProcessingService, TemplateGenerationService templateGenerationService, BulkExportService bulkExportService) {
+ this.bulkProcessingService = bulkProcessingService;
+ this.templateGenerationService = templateGenerationService;
+ this.bulkExportService = bulkExportService;
+ }
+
+ @GetMapping("/status/{id}")
+ public ResponseEntity getUploadStatus(@PathVariable Integer id) {
+ return ResponseEntity.ok().build();
+ }
+
+ @PostMapping("/upload/{type}")
+ public ResponseEntity uploadFile(@PathVariable String type, @RequestParam("file") MultipartFile file) {
+ return ResponseEntity.ok().build();
+ }
+
+ @GetMapping("/templates/{type}")
+ public ResponseEntity generateTemplate(@PathVariable String type) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Disposition", "attachment; filename=lcc_template_"+type.toLowerCase()+".xlsx");
+
+ return ResponseEntity
+ .ok()
+ .headers(headers)
+ .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
+ .body(new InputStreamResource(templateGenerationService.generateTemplate(BulkFileType.valueOf(type.toUpperCase()))));
+ }
+
+ @GetMapping("/download/{type}")
+ public ResponseEntity downloadFile(@PathVariable String type) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Disposition", "attachment; filename=lcc_export_"+type.toLowerCase()+".xlsx");
+
+ return ResponseEntity
+ .ok()
+ .headers(headers)
+ .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
+ .body(new InputStreamResource(bulkExportService.generateExport(BulkFileType.valueOf(type.toUpperCase()))));
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java b/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java
new file mode 100644
index 0000000..7a1828b
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java
@@ -0,0 +1,55 @@
+package de.avatic.lcc.controller.calculation;
+
+
+import de.avatic.lcc.dto.calculation.PremiseDTO;
+import de.avatic.lcc.dto.calculation.SearchDTO;
+import de.avatic.lcc.dto.calculation.view.PremiseViewDTO;
+import de.avatic.lcc.service.calculation.CalclationSearchStringAnalyzerService;
+import de.avatic.lcc.service.calculation.CalculationCreationService;
+import de.avatic.lcc.service.calculation.PremisesService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/calculation")
+public class PremiseController {
+
+ private final CalclationSearchStringAnalyzerService calclationSearchStringAnalyzerService;
+ private final PremisesService premisesServices;
+ private final CalculationCreationService calculationCreationService;
+
+ public PremiseController(CalclationSearchStringAnalyzerService calclationSearchStringAnalyzerService, PremisesService premisesServices, CalculationCreationService calculationCreationService) {
+ this.calclationSearchStringAnalyzerService = calclationSearchStringAnalyzerService;
+ this.premisesServices = premisesServices;
+ this.calculationCreationService = calculationCreationService;
+ }
+
+ @GetMapping("/view")
+ public ResponseEntity> listPremises(@RequestParam String filter, @RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit, @RequestParam(name = "user", required = false) Integer userId, @RequestParam(required = false) Boolean deleted, @RequestParam(required = false) Boolean archived, @RequestParam(required = false) Boolean done) {
+ return ResponseEntity.ok(premisesServices.listCalculation(filter, page, limit, userId, deleted, archived, done));
+ }
+
+ @GetMapping("/search")
+ public ResponseEntity findMaterialsAndSuppliers(@RequestParam String search) {
+ return ResponseEntity.ok(calclationSearchStringAnalyzerService.findMaterialAndSuppliers(search));
+ }
+
+ @GetMapping("/create")
+ public ResponseEntity> createCalculation(@RequestParam("material") List materialIds, @RequestParam("supplier") List supplierIds, @RequestParam("user_supplier") List userSupplierIds, @RequestParam("from_scratch") boolean createEmpty ) {
+ return ResponseEntity.ok(calculationCreationService.createCalculations(materialIds, supplierIds, userSupplierIds, createEmpty));
+ }
+
+ @GetMapping("/edit")
+ public ResponseEntity> getPremises(@RequestParam("premiss_ids") List premissIds) {
+ return ResponseEntity.ok(premisesServices.getPremises(premissIds));
+ }
+
+ @PutMapping("/edit")
+ public ResponseEntity savePremises(@RequestBody List premises ) {
+ premisesServices.savePremises(premises);
+ return ResponseEntity.ok().build();
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/controller/configuration/ContainerRateController.java b/src/main/java/de/avatic/lcc/controller/configuration/ContainerRateController.java
new file mode 100644
index 0000000..6249cf6
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/configuration/ContainerRateController.java
@@ -0,0 +1,16 @@
+package de.avatic.lcc.controller.configuration;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/rates/container")
+public class ContainerRateController {
+
+ @GetMapping("/")
+ public ResponseEntity getRates() {
+ return "Container rates";
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/controller/CountryController.java b/src/main/java/de/avatic/lcc/controller/configuration/CountryController.java
similarity index 54%
rename from src/main/java/de/avatic/lcc/controller/CountryController.java
rename to src/main/java/de/avatic/lcc/controller/configuration/CountryController.java
index da2b0e7..4c61f4a 100644
--- a/src/main/java/de/avatic/lcc/controller/CountryController.java
+++ b/src/main/java/de/avatic/lcc/controller/configuration/CountryController.java
@@ -1,10 +1,10 @@
-package de.avatic.lcc.controller;
+package de.avatic.lcc.controller.configuration;
-import de.avatic.lcc.dto.countries.get.CountryGetDTO;
-import de.avatic.lcc.dto.countries.get.CountryListGetDTO;
-import de.avatic.lcc.dto.countries.post.CountryPostDTO;
+import de.avatic.lcc.dto.configuration.countries.view.CountryViewDTO;
+import de.avatic.lcc.dto.configuration.countries.update.CountryUpdateDTO;
+import de.avatic.lcc.dto.generic.CountryDTO;
import de.avatic.lcc.repositories.pagination.SearchQueryResult;
-import de.avatic.lcc.service.CountryService;
+import de.avatic.lcc.service.configuration.CountryService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -21,11 +21,11 @@ public class CountryController {
}
@GetMapping("/")
- public ResponseEntity> listCountries(@RequestParam(defaultValue = "20") int limit,
- @RequestParam(defaultValue = "0") int page,
- @RequestParam(required = false, defaultValue = "") String filter) {
+ public ResponseEntity> listCountries(@RequestParam(defaultValue = "20") int limit,
+ @RequestParam(defaultValue = "0") int page,
+ @RequestParam(required = false, defaultValue = "") String filter) {
- SearchQueryResult countries = countryService.listMaterial(filter, page, limit);
+ SearchQueryResult countries = countryService.listCountries(filter, page, limit);
return ResponseEntity.ok()
.header("X-Total-Count", String.valueOf(countries.getTotalElements()))
@@ -36,11 +36,12 @@ public class CountryController {
}
@GetMapping("/{id}")
- public ResponseEntity getCountryDetails(@PathVariable Integer id) {
+ public ResponseEntity getCountryDetails(@PathVariable Integer id) {
return ResponseEntity.ok(countryService.getCountry(id));
}
- public ResponseEntity updateCountry(@PathVariable Integer id, @RequestBody CountryPostDTO country) {
+ @PostMapping("/{id}")
+ public ResponseEntity updateCountry(@PathVariable Integer id, @RequestBody CountryUpdateDTO country) {
countryService.updateCountry(id, country);
return ResponseEntity.noContent().build();
}
diff --git a/src/main/java/de/avatic/lcc/controller/MaterialController.java b/src/main/java/de/avatic/lcc/controller/configuration/MaterialController.java
similarity index 76%
rename from src/main/java/de/avatic/lcc/controller/MaterialController.java
rename to src/main/java/de/avatic/lcc/controller/configuration/MaterialController.java
index 2166ccd..e879357 100644
--- a/src/main/java/de/avatic/lcc/controller/MaterialController.java
+++ b/src/main/java/de/avatic/lcc/controller/configuration/MaterialController.java
@@ -1,11 +1,11 @@
-package de.avatic.lcc.controller;
+package de.avatic.lcc.controller.configuration;
-import de.avatic.lcc.dto.material.get.MaterialGetDTO;
-import de.avatic.lcc.dto.material.post.MaterialPostDTO;
-import de.avatic.lcc.model.materials.Material;
-import de.avatic.lcc.dto.material.get.MaterialListGetDTO;
+import de.avatic.lcc.dto.configuration.material.view.MaterialViewDTO;
+import de.avatic.lcc.dto.configuration.material.update.MaterialUpdateDTO;
+import de.avatic.lcc.dto.generic.MaterialDTO;
import de.avatic.lcc.repositories.pagination.SearchQueryResult;
-import de.avatic.lcc.service.MaterialService;
+import de.avatic.lcc.service.configuration.MaterialService;
+import de.avatic.lcc.util.Check;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -34,12 +34,12 @@ public class MaterialController {
* X-Total-Count (total elements), X-Page-Count (total pages), and X-Current-Page (current page).
*/
@GetMapping("/")
- public ResponseEntity> listMaterials(
+ public ResponseEntity> listMaterials(
@RequestParam(defaultValue = "20") int limit,
@RequestParam(defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "") String filter) {
- SearchQueryResult materials = materialService.listMaterial(filter, page, limit);
+ SearchQueryResult materials = materialService.listMaterial(filter, page, limit);
return ResponseEntity.ok()
.header("X-Total-Count", String.valueOf(materials.getTotalElements()))
@@ -56,7 +56,7 @@ public class MaterialController {
* @throws RuntimeException if the material with the given ID is not found.
*/
@GetMapping("/{id}")
- public ResponseEntity getMaterialDetails(@PathVariable Integer id) {
+ public ResponseEntity getMaterialDetails(@PathVariable Integer id) {
return ResponseEntity.ok(materialService.getMaterial(id));
}
@@ -68,11 +68,11 @@ public class MaterialController {
* @return The updated material
*/
@PutMapping("/{id}")
- public ResponseEntity updateMaterial(
+ public ResponseEntity updateMaterial(
@PathVariable Integer id,
- @RequestBody MaterialPostDTO material) {
- materialService.updateMaterial(id, material);
- return ResponseEntity.noContent().build();
+ @RequestBody MaterialUpdateDTO material) {
+ Check.equals(id, material.getId());
+ return ResponseEntity.ok(materialService.updateMaterial(id, material));
}
/**
@@ -88,7 +88,7 @@ public class MaterialController {
}
@PostMapping("/")
- public ResponseEntity createMaterial(@RequestBody MaterialPostDTO material) {
+ public ResponseEntity createMaterial(@RequestBody MaterialUpdateDTO material) {
return ResponseEntity.ok(materialService.createMaterial(material));
}
}
\ No newline at end of file
diff --git a/src/main/java/de/avatic/lcc/controller/configuration/MatrixRateController.java b/src/main/java/de/avatic/lcc/controller/configuration/MatrixRateController.java
new file mode 100644
index 0000000..eba1ef0
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/configuration/MatrixRateController.java
@@ -0,0 +1,16 @@
+package de.avatic.lcc.controller.configuration;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/rates/matrix")
+public class MatrixRateController {
+
+ @GetMapping("/")
+ public String getRates() {
+ return "Matrix rates";
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/controller/configuration/NodeController.java b/src/main/java/de/avatic/lcc/controller/configuration/NodeController.java
new file mode 100644
index 0000000..eca4772
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/configuration/NodeController.java
@@ -0,0 +1,53 @@
+package de.avatic.lcc.controller.configuration;
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.configuration.nodes.view.NodeViewDTO;
+import de.avatic.lcc.dto.configuration.nodes.update.NodeUpdateDTO;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.service.configuration.NodeService;
+import de.avatic.lcc.util.Check;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/nodes")
+public class NodeController {
+
+
+ private final NodeService nodeService;
+
+ public NodeController(NodeService nodeService) {
+ this.nodeService = nodeService;
+ }
+
+ @GetMapping("/")
+ public ResponseEntity> listNodes(@RequestParam(required = false) String filter, @RequestParam(required = false) int page, @RequestParam(required = false) int limit) {
+ nodeService.listNodes(filter, page, limit);
+
+ SearchQueryResult countries = nodeService.listNodes(filter, page, limit);
+
+ return ResponseEntity.ok()
+ .header("X-Total-Count", String.valueOf(countries.getTotalElements()))
+ .header("X-Page-Count", String.valueOf(countries.getTotalPages()))
+ .header("X-Current-Page", String.valueOf(page))
+ .body(countries.toList());
+ }
+
+ @GetMapping("/{id}")
+ public ResponseEntity getNode(@PathVariable Integer id) {
+ return ResponseEntity.ok(nodeService.getNode(id));
+ }
+
+ @DeleteMapping("/{id}")
+ public ResponseEntity deleteNode(@PathVariable Integer id) {
+ return ResponseEntity.ok(nodeService.deleteNode(id));
+ }
+
+ @PutMapping("/{id}")
+ public ResponseEntity updateNode(@PathVariable Integer id, @RequestBody NodeUpdateDTO node) {
+ Check.equals(id, node.getId());
+ return ResponseEntity.ok(nodeService.updateNode(node));
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/controller/PackagingController.java b/src/main/java/de/avatic/lcc/controller/configuration/PackagingController.java
similarity index 76%
rename from src/main/java/de/avatic/lcc/controller/PackagingController.java
rename to src/main/java/de/avatic/lcc/controller/configuration/PackagingController.java
index 81b6a9d..9f859e7 100644
--- a/src/main/java/de/avatic/lcc/controller/PackagingController.java
+++ b/src/main/java/de/avatic/lcc/controller/configuration/PackagingController.java
@@ -1,10 +1,10 @@
-package de.avatic.lcc.controller;
+package de.avatic.lcc.controller.configuration;
-import de.avatic.lcc.dto.packaging.get.PackagingGetDTO;
-import de.avatic.lcc.dto.packaging.post.PackagingPostDTO;
+import de.avatic.lcc.dto.configuration.packaging.view.PackagingViewDTO;
+import de.avatic.lcc.dto.configuration.packaging.update.PackagingUpdateDTO;
import de.avatic.lcc.repositories.packaging.PackagingRepository;
import de.avatic.lcc.repositories.pagination.SearchQueryResult;
-import de.avatic.lcc.service.PackagingService;
+import de.avatic.lcc.service.configuration.PackagingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -25,13 +25,13 @@ public class PackagingController {
}
@GetMapping("/")
- public ResponseEntity> listPackaging(
+ public ResponseEntity> listPackaging(
@RequestParam(defaultValue = "20") int limit,
@RequestParam(defaultValue = "0") int page,
@RequestParam(required = false) Integer materialId,
@RequestParam(required = false) Integer supplierId) {
- SearchQueryResult listEntries = packagingService.listPackaging(materialId, supplierId, page, limit);
+ SearchQueryResult listEntries = packagingService.listPackaging(materialId, supplierId, page, limit);
return ResponseEntity.ok()
.header("X-Total-Count", String.valueOf(listEntries.getTotalElements()))
@@ -43,13 +43,13 @@ public class PackagingController {
}
@GetMapping("/{id}")
- public ResponseEntity getPackagingDetails(@PathVariable Integer id) {
+ public ResponseEntity getPackagingDetails(@PathVariable Integer id) {
return ResponseEntity.ok(packagingService.getPackaging(id));
}
@PutMapping("/{id}")
- public ResponseEntity updatePackaging(@PathVariable Integer id, @RequestBody PackagingPostDTO packaging) {
+ public ResponseEntity updatePackaging(@PathVariable Integer id, @RequestBody PackagingUpdateDTO packaging) {
packagingService.updatePackaging(id, packaging);
return ResponseEntity.noContent().build();
}
@@ -61,7 +61,7 @@ public class PackagingController {
}
@PostMapping("/")
- public ResponseEntity addPackaging(@RequestBody PackagingPostDTO packaging) {
+ public ResponseEntity addPackaging(@RequestBody PackagingUpdateDTO packaging) {
return ResponseEntity.ok(packagingService.createPackaging(packaging));
}
diff --git a/src/main/java/de/avatic/lcc/controller/PropertiesController.java b/src/main/java/de/avatic/lcc/controller/configuration/PropertiesController.java
similarity index 82%
rename from src/main/java/de/avatic/lcc/controller/PropertiesController.java
rename to src/main/java/de/avatic/lcc/controller/configuration/PropertiesController.java
index 2b4392b..de15320 100644
--- a/src/main/java/de/avatic/lcc/controller/PropertiesController.java
+++ b/src/main/java/de/avatic/lcc/controller/configuration/PropertiesController.java
@@ -1,10 +1,9 @@
-package de.avatic.lcc.controller;
+package de.avatic.lcc.controller.configuration;
-import de.avatic.lcc.dto.properties.post.PropertiesPostDTO;
-import de.avatic.lcc.service.PropertiesService;
+import de.avatic.lcc.dto.configuration.properties.post.PropertiesPostDTO;
+import de.avatic.lcc.service.configuration.PropertiesService;
import org.springframework.web.bind.annotation.*;
-import java.util.Collection;
import java.util.List;
@RestController
diff --git a/src/main/java/de/avatic/lcc/controller/report/ReportingController.java b/src/main/java/de/avatic/lcc/controller/report/ReportingController.java
new file mode 100644
index 0000000..da97127
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/report/ReportingController.java
@@ -0,0 +1,52 @@
+package de.avatic.lcc.controller.report;
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.report.ReportDTO;
+import de.avatic.lcc.service.report.ExcelReportingService;
+import de.avatic.lcc.service.report.ReportFinderService;
+import de.avatic.lcc.service.report.ReportingService;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/reports")
+public class ReportingController {
+
+ private final ReportingService reportingService;
+ private final ExcelReportingService excelReportingService;
+ private final ReportFinderService reportFinderService;
+
+ public ReportingController(ReportingService reportingService, ExcelReportingService excelReportingService, ReportFinderService reportFinderService) {
+ this.reportingService = reportingService;
+ this.excelReportingService = excelReportingService;
+ this.reportFinderService = reportFinderService;
+ }
+
+ @GetMapping("/search")
+ public ResponseEntity>> findSupplierForReporting(@RequestParam(value = "material") Integer materialId) {
+ return ResponseEntity.ok(reportFinderService.findSupplierForReporting(materialId));
+ }
+
+ @GetMapping("/view")
+ public ResponseEntity getReport(@RequestParam(value = "material") Integer materialId, @RequestParam(value = "sources") List nodeIds) {
+ return ResponseEntity.ok(reportingService.getReport(materialId, nodeIds));
+ }
+
+ @GetMapping("/download")
+ public ResponseEntity downloadReport(@RequestParam(value = "material") Integer materialId, @RequestParam(value = "sources") List nodeIds) {
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Disposition", "attachment; filename=lcc_report.xlsx");
+
+ return ResponseEntity
+ .ok()
+ .headers(headers)
+ .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
+ .body(new InputStreamResource(excelReportingService.generateExcelReport(materialId, nodeIds)));
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/controller/users/GroupController.java b/src/main/java/de/avatic/lcc/controller/users/GroupController.java
new file mode 100644
index 0000000..256fa0c
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/users/GroupController.java
@@ -0,0 +1,39 @@
+package de.avatic.lcc.controller.users;
+
+import de.avatic.lcc.dto.users.GroupDTO;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.service.users.GroupService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/groups")
+public class GroupController {
+
+ private final GroupService groupService;
+
+ public GroupController(GroupService groupService) {
+ this.groupService = groupService;
+ }
+
+ @GetMapping("/")
+ public ResponseEntity> listGroups(@RequestParam(defaultValue = "20") int limit,
+ @RequestParam(defaultValue = "0") int page) {
+
+ SearchQueryResult groups = groupService.listGroups(page, limit);
+
+ return ResponseEntity.ok()
+ .header("X-Total-Count", String.valueOf(groups.getTotalElements()))
+ .header("X-Page-Count", String.valueOf(groups.getTotalPages()))
+ .header("X-Current-Page", String.valueOf(page))
+ .body(groups.toList());
+ }
+
+ @PutMapping("/")
+ public void updateGroup(GroupDTO group) {
+ return groupService.updateGroup(group);
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/controller/users/UserController.java b/src/main/java/de/avatic/lcc/controller/users/UserController.java
new file mode 100644
index 0000000..dd0f321
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/controller/users/UserController.java
@@ -0,0 +1,42 @@
+package de.avatic.lcc.controller.users;
+
+
+import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.dto.users.UserDTO;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.service.users.UserService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/users")
+public class UserController {
+
+
+ private final UserService userService;
+
+ public UserController(UserService userService) {
+ this.userService = userService;
+ }
+
+ @GetMapping("/")
+ public ResponseEntity> listUsers(
+ @RequestParam(defaultValue = "20") int limit,
+ @RequestParam(defaultValue = "0") int page) {
+
+ SearchQueryResult users = userService.listUsers(page, limit);
+
+ return ResponseEntity.ok()
+ .header("X-Total-Count", String.valueOf(users.getTotalElements()))
+ .header("X-Page-Count", String.valueOf(users.getTotalPages()))
+ .header("X-Current-Page", String.valueOf(page))
+ .body(users.toList());
+ }
+
+ @PutMapping("/")
+ public void udateUser(UserDTO user) {
+ userService.updateUser(user);
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/bulk/BulkFileType.java b/src/main/java/de/avatic/lcc/dto/bulk/BulkFileType.java
new file mode 100644
index 0000000..5ac102b
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/bulk/BulkFileType.java
@@ -0,0 +1,5 @@
+package de.avatic.lcc.dto.bulk;
+
+public enum BulkFileType {
+ CONTAINER_RATE, COUNTRY_MATRIX, MATERIAL, PACKAGING, NODE
+}
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/PremiseDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/PremiseDTO.java
new file mode 100644
index 0000000..8aac222
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/calculation/PremiseDTO.java
@@ -0,0 +1,4 @@
+package de.avatic.lcc.dto.calculation;
+
+public class PremiseDTO {
+}
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/SearchDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/SearchDTO.java
new file mode 100644
index 0000000..d93d27c
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/calculation/SearchDTO.java
@@ -0,0 +1,40 @@
+package de.avatic.lcc.dto.calculation;
+
+import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.dto.generic.NodeDTO;
+
+import java.util.List;
+
+public class SearchDTO {
+
+ private List materials;
+ private List supplier;
+
+
+ public List getMaterials() {
+ return materials;
+ }
+
+ public void setMaterials(List materials) {
+ this.materials = materials;
+ }
+
+ public List getSupplier() {
+ return supplier;
+ }
+
+ public void setSupplier(List supplier) {
+ this.supplier = supplier;
+ }
+
+ public List getUser_supplier() {
+ return user_supplier;
+ }
+
+ public void setUser_supplier(List user_supplier) {
+ this.user_supplier = user_supplier;
+ }
+
+ private List user_supplier;
+
+}
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/view/PremiseViewDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/view/PremiseViewDTO.java
new file mode 100644
index 0000000..b6232b8
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/calculation/view/PremiseViewDTO.java
@@ -0,0 +1,4 @@
+package de.avatic.lcc.dto.calculation.view;
+
+public class PremiseViewDTO {
+}
diff --git a/src/main/java/de/avatic/lcc/dto/countries/post/CountryPostDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/countries/update/CountryUpdateDTO.java
similarity index 81%
rename from src/main/java/de/avatic/lcc/dto/countries/post/CountryPostDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/countries/update/CountryUpdateDTO.java
index 788b72e..3151ac0 100644
--- a/src/main/java/de/avatic/lcc/dto/countries/post/CountryPostDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/countries/update/CountryUpdateDTO.java
@@ -1,8 +1,8 @@
-package de.avatic.lcc.dto.countries.post;
+package de.avatic.lcc.dto.configuration.countries.update;
import java.util.Map;
-public class CountryPostDTO {
+public class CountryUpdateDTO {
String id;
diff --git a/src/main/java/de/avatic/lcc/dto/countries/get/CountryGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewDTO.java
similarity index 75%
rename from src/main/java/de/avatic/lcc/dto/countries/get/CountryGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewDTO.java
index c3f6377..a9fe943 100644
--- a/src/main/java/de/avatic/lcc/dto/countries/get/CountryGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewDTO.java
@@ -1,10 +1,10 @@
-package de.avatic.lcc.dto.countries.get;
+package de.avatic.lcc.dto.configuration.countries.view;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collection;
-public class CountryGetDTO {
+public class CountryViewDTO {
private Integer id;
@@ -16,7 +16,7 @@ public class CountryGetDTO {
@JsonProperty("region_code")
private String regionCode;
- private Collection properties;
+ private Collection properties;
public Integer getId() {
return id;
@@ -50,11 +50,11 @@ public class CountryGetDTO {
this.regionCode = regionCode;
}
- public Collection getProperties() {
+ public Collection getProperties() {
return properties;
}
- public void setProperties(Collection properties) {
+ public void setProperties(Collection properties) {
this.properties = properties;
}
}
diff --git a/src/main/java/de/avatic/lcc/dto/countries/get/CountryPropertyGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewPropertyDTO.java
similarity index 94%
rename from src/main/java/de/avatic/lcc/dto/countries/get/CountryPropertyGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewPropertyDTO.java
index 0cdd866..fe57068 100644
--- a/src/main/java/de/avatic/lcc/dto/countries/get/CountryPropertyGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/countries/view/CountryViewPropertyDTO.java
@@ -1,8 +1,8 @@
-package de.avatic.lcc.dto.countries.get;
+package de.avatic.lcc.dto.configuration.countries.view;
import com.fasterxml.jackson.annotation.JsonProperty;
-public class CountryPropertyGetDTO {
+public class CountryViewPropertyDTO {
private String name;
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialListGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/material/update/MaterialUpdateDTO.java
similarity index 85%
rename from src/main/java/de/avatic/lcc/dto/material/get/MaterialListGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/material/update/MaterialUpdateDTO.java
index 430b55d..a67f1c1 100644
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialListGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/material/update/MaterialUpdateDTO.java
@@ -1,22 +1,20 @@
-package de.avatic.lcc.dto.material.get;
-
+package de.avatic.lcc.dto.configuration.material.update;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Objects;
-public class MaterialListGetDTO {
-
+public class MaterialUpdateDTO {
private Integer id;
@JsonProperty("part_number")
private String partNumber;
private String name;
private String hsCode;
- public MaterialListGetDTO() {
+ public MaterialUpdateDTO() {
}
- public MaterialListGetDTO(Integer id, String partNumber, String name, String hsCode) {
+ public MaterialUpdateDTO(Integer id, String partNumber, String name, String hsCode) {
this.id = id;
this.partNumber = partNumber;
this.name = name;
@@ -68,7 +66,7 @@ public class MaterialListGetDTO {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
- MaterialListGetDTO that = (MaterialListGetDTO) o;
+ MaterialUpdateDTO that = (MaterialUpdateDTO) o;
return Objects.equals(id, that.id) &&
Objects.equals(partNumber, that.partNumber) &&
Objects.equals(name, that.name);
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewDTO.java
similarity index 81%
rename from src/main/java/de/avatic/lcc/dto/material/get/MaterialGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewDTO.java
index fac8c39..a377395 100644
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewDTO.java
@@ -1,11 +1,11 @@
-package de.avatic.lcc.dto.material.get;
+package de.avatic.lcc.dto.configuration.material.view;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import java.util.Objects;
-public class MaterialGetDTO {
+public class MaterialViewDTO {
private Integer id;
@JsonProperty("part_number")
@@ -18,12 +18,12 @@ public class MaterialGetDTO {
@JsonProperty("packaging")
- private List handlingUnits;
+ private List handlingUnits;
- public MaterialGetDTO() {
+ public MaterialViewDTO() {
}
- public MaterialGetDTO(Integer id, String partNumber, String name, String hs_code, List handling_units) {
+ public MaterialViewDTO(Integer id, String partNumber, String name, String hs_code, List handling_units) {
this.id = id;
this.partNumber = partNumber;
this.name = name;
@@ -68,11 +68,11 @@ public class MaterialGetDTO {
}
@JsonProperty("handling_units")
- public List getHandlingUnits() {
+ public List getHandlingUnits() {
return handlingUnits;
}
- public void setHandlingUnits(List handlingUnits) {
+ public void setHandlingUnits(List handlingUnits) {
this.handlingUnits = handlingUnits;
}
@@ -91,7 +91,7 @@ public class MaterialGetDTO {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
- MaterialGetDTO that = (MaterialGetDTO) o;
+ MaterialViewDTO that = (MaterialViewDTO) o;
return Objects.equals(id, that.id) &&
Objects.equals(partNumber, that.partNumber) &&
Objects.equals(name, that.name) &&
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialPackagingGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewPackagingDTO.java
similarity index 57%
rename from src/main/java/de/avatic/lcc/dto/material/get/MaterialPackagingGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewPackagingDTO.java
index 34a7224..2150b2b 100644
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialPackagingGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/material/view/MaterialViewPackagingDTO.java
@@ -1,21 +1,23 @@
-package de.avatic.lcc.dto.material.get;
+package de.avatic.lcc.dto.configuration.material.view;
import com.fasterxml.jackson.annotation.JsonProperty;
+import de.avatic.lcc.dto.generic.DimensionDTO;
+import de.avatic.lcc.dto.generic.NodeDTO;
-public class MaterialPackagingGetDTO {
+public class MaterialViewPackagingDTO {
private Integer id;
@JsonProperty("is_deprecated")
private Boolean isDeprecated;
- private MaterialSupplierGetDTO supplier;
+ private NodeDTO supplier;
@JsonProperty("handling_unit")
- private MaterialDimensionGetDTO hu;
+ private DimensionDTO hu;
@JsonProperty("small_handling_unit")
- private MaterialDimensionGetDTO shu;
+ private DimensionDTO shu;
public Integer getId() {
return id;
@@ -33,27 +35,27 @@ public class MaterialPackagingGetDTO {
isDeprecated = deprecated;
}
- public MaterialSupplierGetDTO getSupplier() {
+ public NodeDTO getSupplier() {
return supplier;
}
- public void setSupplier(MaterialSupplierGetDTO supplier) {
+ public void setSupplier(NodeDTO supplier) {
this.supplier = supplier;
}
- public MaterialDimensionGetDTO getHu() {
+ public DimensionDTO getHu() {
return hu;
}
- public void setHu(MaterialDimensionGetDTO hu) {
+ public void setHu(DimensionDTO hu) {
this.hu = hu;
}
- public MaterialDimensionGetDTO getShu() {
+ public DimensionDTO getShu() {
return shu;
}
- public void setShu(MaterialDimensionGetDTO shu) {
+ public void setShu(DimensionDTO shu) {
this.shu = shu;
}
}
\ No newline at end of file
diff --git a/src/main/java/de/avatic/lcc/dto/configuration/nodes/update/NodeUpdateDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/nodes/update/NodeUpdateDTO.java
new file mode 100644
index 0000000..19ee3ff
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/configuration/nodes/update/NodeUpdateDTO.java
@@ -0,0 +1,29 @@
+package de.avatic.lcc.dto.configuration.nodes.update;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import de.avatic.lcc.dto.generic.CountryDTO;
+import de.avatic.lcc.dto.generic.LocationDTO;
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.generic.NodeTypeDTO;
+
+import java.util.List;
+import java.util.Map;
+
+public class NodeUpdateDTO {
+
+ private Integer id;
+ private String name;
+ private CountryDTO country;
+ private String address;
+ private List types;
+ private LocationDTO location;
+ @JsonProperty("is_deprecated")
+ private Boolean isDeprecated;
+ private Map predecessors;
+ @JsonProperty("outbound_countries")
+ private List outboundCountries;
+
+ public Integer getId() {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/configuration/nodes/view/NodeViewDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/nodes/view/NodeViewDTO.java
new file mode 100644
index 0000000..63c998e
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/configuration/nodes/view/NodeViewDTO.java
@@ -0,0 +1,98 @@
+package de.avatic.lcc.dto.configuration.nodes.view;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import de.avatic.lcc.dto.generic.CountryDTO;
+import de.avatic.lcc.dto.generic.LocationDTO;
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.generic.NodeTypeDTO;
+
+import java.util.List;
+import java.util.Map;
+
+public class NodeViewDTO {
+
+ private Integer id;
+ private String name;
+ private CountryDTO country;
+ private String address;
+ private List types;
+ private LocationDTO location;
+ @JsonProperty("is_deprecated")
+ private Boolean isDeprecated;
+ private Map predecessors;
+ @JsonProperty("outbound_countries")
+ private List outboundCountries;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public CountryDTO getCountry() {
+ return country;
+ }
+
+ public void setCountry(CountryDTO country) {
+ this.country = country;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public List getTypes() {
+ return types;
+ }
+
+ public void setTypes(List types) {
+ this.types = types;
+ }
+
+ public LocationDTO getLocation() {
+ return location;
+ }
+
+ public void setLocation(LocationDTO location) {
+ this.location = location;
+ }
+
+ public Boolean getDeprecated() {
+ return isDeprecated;
+ }
+
+ public void setDeprecated(Boolean deprecated) {
+ isDeprecated = deprecated;
+ }
+
+ public Map getPredecessors() {
+ return predecessors;
+ }
+
+ public void setPredecessors(Map predecessors) {
+ this.predecessors = predecessors;
+ }
+
+ public List getOutboundCountries() {
+ return outboundCountries;
+ }
+
+ public void setOutboundCountries(List outboundCountries) {
+ this.outboundCountries = outboundCountries;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/post/PackagingPostDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/packaging/update/PackagingUpdateDTO.java
similarity index 77%
rename from src/main/java/de/avatic/lcc/dto/packaging/post/PackagingPostDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/packaging/update/PackagingUpdateDTO.java
index 5e1af3e..ee4b558 100644
--- a/src/main/java/de/avatic/lcc/dto/packaging/post/PackagingPostDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/packaging/update/PackagingUpdateDTO.java
@@ -1,12 +1,12 @@
-package de.avatic.lcc.dto.packaging.post;
+package de.avatic.lcc.dto.configuration.packaging.update;
import com.fasterxml.jackson.annotation.JsonProperty;
+import de.avatic.lcc.dto.generic.DimensionDTO;
-import java.util.List;
import java.util.Map;
-public class PackagingPostDTO {
+public class PackagingUpdateDTO {
private Integer id;
@@ -18,10 +18,10 @@ public class PackagingPostDTO {
private Integer materialId;
@JsonProperty("handling_unit")
- private PackagingDimensionPostDTO hu;
+ private DimensionDTO hu;
@JsonProperty("small_handling_unit")
- private PackagingDimensionPostDTO shu;
+ private DimensionDTO shu;
@JsonProperty("properties")
private Map properties;
@@ -58,19 +58,19 @@ public class PackagingPostDTO {
this.materialId = materialId;
}
- public PackagingDimensionPostDTO getHu() {
+ public DimensionDTO getHu() {
return hu;
}
- public void setHu(PackagingDimensionPostDTO hu) {
+ public void setHu(DimensionDTO hu) {
this.hu = hu;
}
- public PackagingDimensionPostDTO getShu() {
+ public DimensionDTO getShu() {
return shu;
}
- public void setShu(PackagingDimensionPostDTO shu) {
+ public void setShu(DimensionDTO shu) {
this.shu = shu;
}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewDTO.java
similarity index 50%
rename from src/main/java/de/avatic/lcc/dto/packaging/get/PackagingGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewDTO.java
index f30d34c..0095f05 100644
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewDTO.java
@@ -1,28 +1,31 @@
-package de.avatic.lcc.dto.packaging.get;
+package de.avatic.lcc.dto.configuration.packaging.view;
import com.fasterxml.jackson.annotation.JsonProperty;
+import de.avatic.lcc.dto.generic.DimensionDTO;
+import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.dto.generic.NodeDTO;
import java.util.List;
-public class PackagingGetDTO {
+public class PackagingViewDTO {
private Integer id;
@JsonProperty("is_deprecated")
private Boolean isDeprecated;
- private PackagingSupplierGetDTO supplier;
+ private NodeDTO supplier;
- private PackagingMaterialGetDTO material;
+ private MaterialDTO material;
@JsonProperty("handling_unit")
- private PackagingDimensionGetDTO hu;
+ private DimensionDTO hu;
@JsonProperty("small_handling_unit")
- private PackagingDimensionGetDTO shu;
+ private DimensionDTO shu;
- private List properties;
+ private List properties;
public Integer getId() {
return id;
@@ -40,43 +43,43 @@ public class PackagingGetDTO {
isDeprecated = deprecated;
}
- public PackagingSupplierGetDTO getSupplier() {
+ public NodeDTO getSupplier() {
return supplier;
}
- public void setSupplier(PackagingSupplierGetDTO supplier) {
+ public void setSupplier(NodeDTO supplier) {
this.supplier = supplier;
}
- public PackagingMaterialGetDTO getMaterial() {
+ public MaterialDTO getMaterial() {
return material;
}
- public void setMaterial(PackagingMaterialGetDTO material) {
+ public void setMaterial(MaterialDTO material) {
this.material = material;
}
- public PackagingDimensionGetDTO getHu() {
+ public DimensionDTO getHu() {
return hu;
}
- public void setHu(PackagingDimensionGetDTO hu) {
+ public void setHu(DimensionDTO hu) {
this.hu = hu;
}
- public PackagingDimensionGetDTO getShu() {
+ public DimensionDTO getShu() {
return shu;
}
- public void setShu(PackagingDimensionGetDTO shu) {
+ public void setShu(DimensionDTO shu) {
this.shu = shu;
}
- public List getProperties() {
+ public List getProperties() {
return properties;
}
- public void setProperties(List properties) {
+ public void setProperties(List properties) {
this.properties = properties;
}
}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingPropertyGetDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewPropertyDTO.java
similarity index 93%
rename from src/main/java/de/avatic/lcc/dto/packaging/get/PackagingPropertyGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewPropertyDTO.java
index 36d0757..219a0b6 100644
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingPropertyGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/packaging/view/PackagingViewPropertyDTO.java
@@ -1,8 +1,8 @@
-package de.avatic.lcc.dto.packaging.get;
+package de.avatic.lcc.dto.configuration.packaging.view;
import com.fasterxml.jackson.annotation.JsonProperty;
-public class PackagingPropertyGetDTO {
+public class PackagingViewPropertyDTO {
private String name;
diff --git a/src/main/java/de/avatic/lcc/dto/properties/post/PropertiesPostDTO.java b/src/main/java/de/avatic/lcc/dto/configuration/properties/post/PropertiesPostDTO.java
similarity index 59%
rename from src/main/java/de/avatic/lcc/dto/properties/post/PropertiesPostDTO.java
rename to src/main/java/de/avatic/lcc/dto/configuration/properties/post/PropertiesPostDTO.java
index 8cb67c7..28c7e04 100644
--- a/src/main/java/de/avatic/lcc/dto/properties/post/PropertiesPostDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/configuration/properties/post/PropertiesPostDTO.java
@@ -1,4 +1,4 @@
-package de.avatic.lcc.dto.properties.post;
+package de.avatic.lcc.dto.configuration.properties.post;
public class PropertiesPostDTO {
diff --git a/src/main/java/de/avatic/lcc/dto/countries/get/CountryListGetDTO.java b/src/main/java/de/avatic/lcc/dto/countries/get/CountryListGetDTO.java
deleted file mode 100644
index fa7dd24..0000000
--- a/src/main/java/de/avatic/lcc/dto/countries/get/CountryListGetDTO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package de.avatic.lcc.dto.countries.get;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class CountryListGetDTO {
-
- private Integer id;
-
- private String name;
-
- @JsonProperty("iso_code")
- private String isoCode;
-
- @JsonProperty("region_code")
- private String regionCode;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getIsoCode() {
- return isoCode;
- }
-
- public void setIsoCode(String isoCode) {
- this.isoCode = isoCode;
- }
-
- public String getRegionCode() {
- return regionCode;
- }
-
- public void setRegionCode(String regionCode) {
- this.regionCode = regionCode;
- }
-
- @Override
- public String toString() {
- return "CountryListGetDTO{" +
- "id=" + id +
- ", isoCode='" + isoCode + '\'' +
- '}';
- }
-}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingCountryGetDTO.java b/src/main/java/de/avatic/lcc/dto/generic/CountryDTO.java
similarity index 75%
rename from src/main/java/de/avatic/lcc/dto/packaging/get/PackagingCountryGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/generic/CountryDTO.java
index a866aa8..6c6ad66 100644
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingCountryGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/generic/CountryDTO.java
@@ -1,8 +1,8 @@
-package de.avatic.lcc.dto.packaging.get;
+package de.avatic.lcc.dto.generic;
import com.fasterxml.jackson.annotation.JsonProperty;
-public class PackagingCountryGetDTO {
+public class CountryDTO {
@JsonProperty("id")
private Integer id;
@@ -13,6 +13,7 @@ public class PackagingCountryGetDTO {
@JsonProperty("region_code")
private String regionCode;
+ private String name;
public Integer getId() {
return id;
@@ -38,4 +39,11 @@ public class PackagingCountryGetDTO {
this.regionCode = regionCode;
}
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
}
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialDimensionGetDTO.java b/src/main/java/de/avatic/lcc/dto/generic/DimensionDTO.java
similarity index 96%
rename from src/main/java/de/avatic/lcc/dto/material/get/MaterialDimensionGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/generic/DimensionDTO.java
index 3f3af4e..38af0d8 100644
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialDimensionGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/generic/DimensionDTO.java
@@ -1,11 +1,11 @@
-package de.avatic.lcc.dto.material.get;
+package de.avatic.lcc.dto.generic;
import com.fasterxml.jackson.annotation.JsonProperty;
import de.avatic.lcc.model.packaging.PackagingType;
import de.avatic.lcc.model.utils.DimensionUnit;
import de.avatic.lcc.model.utils.WeightUnit;
-public class MaterialDimensionGetDTO {
+public class DimensionDTO {
private Integer id;
diff --git a/src/main/java/de/avatic/lcc/dto/generic/LocationDTO.java b/src/main/java/de/avatic/lcc/dto/generic/LocationDTO.java
new file mode 100644
index 0000000..02771de
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/generic/LocationDTO.java
@@ -0,0 +1,81 @@
+package de.avatic.lcc.dto.generic;
+
+import java.util.Objects;
+
+/**
+ * Represents a geographical location with latitude and longitude.
+ * This immutable DTO (Data Transfer Object) is used to transfer location data across system layers.
+ */
+public class LocationDTO {
+
+ /**
+ * The latitude of the location.
+ * Positive values indicate north and negative values indicate south.
+ */
+ private final double latitude;
+
+ /**
+ * The longitude of the location.
+ * Positive values indicate east and negative values indicate west.
+ */
+ private final double longitude;
+
+ /**
+ * Constructs a new {@code LocationDTO} with the specified latitude and longitude.
+ *
+ * @param latitude the latitude of the location, where north is positive and south is negative
+ * @param longitude the longitude of the location, where east is positive and west is negative
+ */
+ public LocationDTO(double latitude, double longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ /**
+ * Default constructor for creating a {@code LocationDTO} at origin (0,0).
+ * Required for frameworks that use default constructors.
+ */
+ public LocationDTO() {
+ this(0.0, 0.0);
+ }
+
+ /**
+ * Gets the latitude of the location.
+ *
+ * @return the latitude, where positive values indicate north and negative values indicate south
+ */
+ public double getLatitude() {
+ return latitude;
+ }
+
+ /**
+ * Gets the longitude of the location.
+ *
+ * @return the longitude, where positive values indicate east and negative values indicate west
+ */
+ public double getLongitude() {
+ return longitude;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ LocationDTO that = (LocationDTO) o;
+ return Double.compare(that.latitude, latitude) == 0 &&
+ Double.compare(that.longitude, longitude) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(latitude, longitude);
+ }
+
+ @Override
+ public String toString() {
+ return "LocationDTO{" +
+ "latitude=" + latitude +
+ ", longitude=" + longitude +
+ '}';
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/material/post/MaterialPostDTO.java b/src/main/java/de/avatic/lcc/dto/generic/MaterialDTO.java
similarity index 86%
rename from src/main/java/de/avatic/lcc/dto/material/post/MaterialPostDTO.java
rename to src/main/java/de/avatic/lcc/dto/generic/MaterialDTO.java
index a4a50df..6ac5776 100644
--- a/src/main/java/de/avatic/lcc/dto/material/post/MaterialPostDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/generic/MaterialDTO.java
@@ -1,20 +1,22 @@
-package de.avatic.lcc.dto.material.post;
+package de.avatic.lcc.dto.generic;
+
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Objects;
-public class MaterialPostDTO {
+public class MaterialDTO {
+
private Integer id;
@JsonProperty("part_number")
private String partNumber;
private String name;
private String hsCode;
- public MaterialPostDTO() {
+ public MaterialDTO() {
}
- public MaterialPostDTO(Integer id, String partNumber, String name, String hsCode) {
+ public MaterialDTO(Integer id, String partNumber, String name, String hsCode) {
this.id = id;
this.partNumber = partNumber;
this.name = name;
@@ -66,7 +68,7 @@ public class MaterialPostDTO {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
- MaterialPostDTO that = (MaterialPostDTO) o;
+ MaterialDTO that = (MaterialDTO) o;
return Objects.equals(id, that.id) &&
Objects.equals(partNumber, that.partNumber) &&
Objects.equals(name, that.name);
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialSupplierGetDTO.java b/src/main/java/de/avatic/lcc/dto/generic/NodeDTO.java
similarity index 73%
rename from src/main/java/de/avatic/lcc/dto/material/get/MaterialSupplierGetDTO.java
rename to src/main/java/de/avatic/lcc/dto/generic/NodeDTO.java
index 15bc3af..f8866f3 100644
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialSupplierGetDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/generic/NodeDTO.java
@@ -1,18 +1,17 @@
-package de.avatic.lcc.dto.material.get;
+package de.avatic.lcc.dto.generic;
import com.fasterxml.jackson.annotation.JsonProperty;
-import de.avatic.lcc.dto.generic.NodeTypeDTO;
-import de.avatic.lcc.dto.packaging.get.PackagingCountryGetDTO;
import java.util.List;
-public class MaterialSupplierGetDTO {
+public class NodeDTO {
private Integer id;
private String name;
- private MaterialCountryGetDTO country;
+ private CountryDTO country;
private String address;
private List types;
+ private LocationDTO location;
@JsonProperty("is_deprecated")
private Boolean isDeprecated;
@@ -33,11 +32,11 @@ public class MaterialSupplierGetDTO {
this.name = name;
}
- public MaterialCountryGetDTO getCountry() {
+ public CountryDTO getCountry() {
return country;
}
- public void setCountry(MaterialCountryGetDTO country) {
+ public void setCountry(CountryDTO country) {
this.country = country;
}
@@ -64,4 +63,12 @@ public class MaterialSupplierGetDTO {
public void setDeprecated(Boolean deprecated) {
isDeprecated = deprecated;
}
+
+ public LocationDTO getLocation() {
+ return location;
+ }
+
+ public void setLocation(LocationDTO location) {
+ this.location = location;
+ }
}
diff --git a/src/main/java/de/avatic/lcc/dto/material/get/MaterialCountryGetDTO.java b/src/main/java/de/avatic/lcc/dto/material/get/MaterialCountryGetDTO.java
deleted file mode 100644
index 2f9bfbc..0000000
--- a/src/main/java/de/avatic/lcc/dto/material/get/MaterialCountryGetDTO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package de.avatic.lcc.dto.material.get;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class MaterialCountryGetDTO {
-
- @JsonProperty("id")
- private Integer id;
-
- @JsonProperty("iso_code")
- private String isoCode;
-
- @JsonProperty("region_code")
- private String regionCode;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getIsoCode() {
- return isoCode;
- }
-
- public void setIsoCode(String isoCode) {
- this.isoCode = isoCode;
- }
-
- public String getRegionCode() {
- return regionCode;
- }
-
- public void setRegionCode(String regionCode) {
- this.regionCode = regionCode;
- }
-
-}
diff --git a/src/main/java/de/avatic/lcc/dto/nodes/NodeDTO.java b/src/main/java/de/avatic/lcc/dto/nodes/NodeDTO.java
deleted file mode 100644
index 5698546..0000000
--- a/src/main/java/de/avatic/lcc/dto/nodes/NodeDTO.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.avatic.lcc.dto.nodes;
-
-public class NodeDTO {
-
- // TODO
-
-}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingDimensionGetDTO.java b/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingDimensionGetDTO.java
deleted file mode 100644
index 6a2bd25..0000000
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingDimensionGetDTO.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package de.avatic.lcc.dto.packaging.get;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import de.avatic.lcc.model.packaging.PackagingType;
-import de.avatic.lcc.model.utils.DimensionUnit;
-import de.avatic.lcc.model.utils.WeightUnit;
-
-public class PackagingDimensionGetDTO {
-
- private Integer id;
-
- private PackagingType type;
-
- private Double length;
-
- private Double width;
-
- private Double height;
-
- @JsonProperty("dimension_unit")
- private DimensionUnit dimensionUnit;
-
- private Double weight;
-
- @JsonProperty("weight_unit")
- private WeightUnit weightUnit;
-
- @JsonProperty("content_unit_count")
- private Integer contentUnitCount;
-
- @JsonProperty("is_deprecated")
- private Boolean isDeprecated;
-
- public PackagingType getType() {
- return type;
- }
-
- public void setType(PackagingType type) {
- this.type = type;
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public Double getLength() {
- return length;
- }
-
- public void setLength(Double length) {
- this.length = length;
- }
-
- public Double getWidth() {
- return width;
- }
-
- public void setWidth(Double width) {
- this.width = width;
- }
-
- public Double getHeight() {
- return height;
- }
-
- public void setHeight(Double height) {
- this.height = height;
- }
-
- public DimensionUnit getDimensionUnit() {
- return dimensionUnit;
- }
-
- public void setDimensionUnit(DimensionUnit dimensionUnit) {
- this.dimensionUnit = dimensionUnit;
- }
-
- public Double getWeight() {
- return weight;
- }
-
- public void setWeight(Double weight) {
- this.weight = weight;
- }
-
- public WeightUnit getWeightUnit() {
- return weightUnit;
- }
-
- public void setWeightUnit(WeightUnit weightUnit) {
- this.weightUnit = weightUnit;
- }
-
- public Integer getContentUnitCount() {
- return contentUnitCount;
- }
-
- public void setContentUnitCount(Integer contentUnitCount) {
- this.contentUnitCount = contentUnitCount;
- }
-
- public Boolean getDeprecated() {
- return isDeprecated;
- }
-
- public void setDeprecated(Boolean deprecated) {
- isDeprecated = deprecated;
- }
-}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingMaterialGetDTO.java b/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingMaterialGetDTO.java
deleted file mode 100644
index eef3847..0000000
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingMaterialGetDTO.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package de.avatic.lcc.dto.packaging.get;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class PackagingMaterialGetDTO {
-
- private Integer id;
- @JsonProperty("part_number")
- private String partNumber;
- private String name;
- private String hsCode;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getPartNumber() {
- return partNumber;
- }
-
- public void setPartNumber(String partNumber) {
- this.partNumber = partNumber;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getHsCode() {
- return hsCode;
- }
-
- public void setHsCode(String hsCode) {
- this.hsCode = hsCode;
- }
-}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingSupplierGetDTO.java b/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingSupplierGetDTO.java
deleted file mode 100644
index afbc35b..0000000
--- a/src/main/java/de/avatic/lcc/dto/packaging/get/PackagingSupplierGetDTO.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package de.avatic.lcc.dto.packaging.get;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import de.avatic.lcc.dto.generic.NodeTypeDTO;
-
-import java.util.List;
-
-public class PackagingSupplierGetDTO {
-
- private Integer id;
- private String name;
- private PackagingCountryGetDTO country;
- private String address;
- private List types;
-
- @JsonProperty("is_deprecated")
- private Boolean isDeprecated;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public PackagingCountryGetDTO getCountry() {
- return country;
- }
-
- public void setCountry(PackagingCountryGetDTO country) {
- this.country = country;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public List getTypes() {
- return types;
- }
-
- public void setTypes(List types) {
- this.types = types;
- }
-
- public void setDeprecated(Boolean isDeprecated) {
- this.isDeprecated = isDeprecated;
- }
-}
diff --git a/src/main/java/de/avatic/lcc/dto/packaging/post/PackagingDimensionPostDTO.java b/src/main/java/de/avatic/lcc/dto/packaging/post/PackagingDimensionPostDTO.java
deleted file mode 100644
index 64e7db3..0000000
--- a/src/main/java/de/avatic/lcc/dto/packaging/post/PackagingDimensionPostDTO.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package de.avatic.lcc.dto.packaging.post;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import de.avatic.lcc.model.packaging.PackagingType;
-import de.avatic.lcc.model.utils.DimensionUnit;
-import de.avatic.lcc.model.utils.WeightUnit;
-
-public class PackagingDimensionPostDTO {
-
- private Integer id;
-
- private PackagingType type;
-
- private Double length;
-
- private Double width;
-
- private Double height;
-
- @JsonProperty("dimension_unit")
- private DimensionUnit dimensionUnit;
-
- private Double weight;
-
- @JsonProperty("weight_unit")
- private WeightUnit weightUnit;
-
- @JsonProperty("content_unit_count")
- private Integer contentUnitCount;
-
- @JsonProperty("is_deprecated")
- private Boolean isDeprecated;
-
- public PackagingType getType() {
- return type;
- }
-
- public void setType(PackagingType type) {
- this.type = type;
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public Double getLength() {
- return length;
- }
-
- public void setLength(Double length) {
- this.length = length;
- }
-
- public Double getWidth() {
- return width;
- }
-
- public void setWidth(Double width) {
- this.width = width;
- }
-
- public Double getHeight() {
- return height;
- }
-
- public void setHeight(Double height) {
- this.height = height;
- }
-
- public DimensionUnit getDimensionUnit() {
- return dimensionUnit;
- }
-
- public void setDimensionUnit(DimensionUnit dimensionUnit) {
- this.dimensionUnit = dimensionUnit;
- }
-
- public Double getWeight() {
- return weight;
- }
-
- public void setWeight(Double weight) {
- this.weight = weight;
- }
-
- public WeightUnit getWeightUnit() {
- return weightUnit;
- }
-
- public void setWeightUnit(WeightUnit weightUnit) {
- this.weightUnit = weightUnit;
- }
-
- public Integer getContentUnitCount() {
- return contentUnitCount;
- }
-
- public void setContentUnitCount(Integer contentUnitCount) {
- this.contentUnitCount = contentUnitCount;
- }
-
- public Boolean getDeprecated() {
- return isDeprecated;
- }
-
- public void setDeprecated(Boolean deprecated) {
- isDeprecated = deprecated;
- }
-}
diff --git a/src/main/java/de/avatic/lcc/dto/report/ReportDTO.java b/src/main/java/de/avatic/lcc/dto/report/ReportDTO.java
new file mode 100644
index 0000000..e1086f4
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/report/ReportDTO.java
@@ -0,0 +1,4 @@
+package de.avatic.lcc.dto.report;
+
+public class ReportDTO {
+}
diff --git a/src/main/java/de/avatic/lcc/dto/users/GroupDTO.java b/src/main/java/de/avatic/lcc/dto/users/GroupDTO.java
new file mode 100644
index 0000000..39fec00
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/users/GroupDTO.java
@@ -0,0 +1,29 @@
+package de.avatic.lcc.dto.users;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class GroupDTO {
+
+ @JsonProperty("group_name")
+ private String name;
+
+ @JsonProperty("group_description")
+ private String description;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/users/UserDTO.java b/src/main/java/de/avatic/lcc/dto/users/UserDTO.java
new file mode 100644
index 0000000..c645b9d
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/users/UserDTO.java
@@ -0,0 +1,75 @@
+package de.avatic.lcc.dto.users;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+public class UserDTO {
+
+ @JsonProperty("firstname")
+ private String firstName;
+
+ @JsonProperty("lastname")
+ private String lastName;
+
+ @JsonProperty("mail")
+ private String email;
+
+ @JsonProperty("workday_id")
+ private String workdayId;
+
+ @JsonProperty("is_active")
+ private boolean isActive;
+
+ @JsonProperty("groups")
+ private List groups;
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getWorkdayId() {
+ return workdayId;
+ }
+
+ public void setWorkdayId(String workdayId) {
+ this.workdayId = workdayId;
+ }
+
+ public boolean isActive() {
+ return isActive;
+ }
+
+ public void setActive(boolean active) {
+ isActive = active;
+ }
+
+ public List getGroups() {
+ return groups;
+ }
+
+ public void setGroups(List groups) {
+ this.groups = groups;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/model/materials/MaterialPackaging.java b/src/main/java/de/avatic/lcc/model/materials/MaterialPackaging.java
index 23d66a4..64856f8 100644
--- a/src/main/java/de/avatic/lcc/model/materials/MaterialPackaging.java
+++ b/src/main/java/de/avatic/lcc/model/materials/MaterialPackaging.java
@@ -1,7 +1,7 @@
package de.avatic.lcc.model.materials;
import com.fasterxml.jackson.annotation.JsonProperty;
-import de.avatic.lcc.dto.packaging.get.PackagingDimensionGetDTO;
+import de.avatic.lcc.dto.generic.DimensionDTO;
public class MaterialPackaging {
@@ -10,7 +10,7 @@ public class MaterialPackaging {
private MaterialSupplier supplier;
@JsonProperty("handling_unit")
- private PackagingDimensionGetDTO hu;
+ private DimensionDTO hu;
public Integer getId() {
@@ -29,11 +29,11 @@ public class MaterialPackaging {
this.supplier = supplier;
}
- public PackagingDimensionGetDTO getHu() {
+ public DimensionDTO getHu() {
return hu;
}
- public void setHu(PackagingDimensionGetDTO hu) {
+ public void setHu(DimensionDTO hu) {
this.hu = hu;
}
}
diff --git a/src/main/java/de/avatic/lcc/model/nodes/Node.java b/src/main/java/de/avatic/lcc/model/nodes/Node.java
index 8e827f4..8a9d534 100644
--- a/src/main/java/de/avatic/lcc/model/nodes/Node.java
+++ b/src/main/java/de/avatic/lcc/model/nodes/Node.java
@@ -6,6 +6,7 @@ import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
public class Node {
@@ -48,7 +49,7 @@ public class Node {
private Integer countryId;
- private List nodePredecessors;
+ private Map nodePredecessors;
private Collection outboundCountries;
@@ -156,11 +157,11 @@ public class Node {
this.countryId = countryId;
}
- public List getNodePredecessors() {
+ public Map getNodePredecessors() {
return nodePredecessors;
}
- public void setNodePredecessors(List nodePredecessors) {
+ public void setNodePredecessors(Map nodePredecessors) {
this.nodePredecessors = nodePredecessors;
}
diff --git a/src/main/java/de/avatic/lcc/model/nodes/NodeListEntry.java b/src/main/java/de/avatic/lcc/model/nodes/NodeListEntry.java
index 735f3f1..18b6e3e 100644
--- a/src/main/java/de/avatic/lcc/model/nodes/NodeListEntry.java
+++ b/src/main/java/de/avatic/lcc/model/nodes/NodeListEntry.java
@@ -1,18 +1,17 @@
package de.avatic.lcc.model.nodes;
-import de.avatic.lcc.dto.generic.NodeTypeDTO;
import de.avatic.lcc.model.country.CountryListEntry;
-import java.util.List;
-
public class NodeListEntry {
private Integer id;
private String name;
private CountryListEntry country;
private String address;
- private List types;
-
+ private Boolean isSink;
+ private Boolean isSource;
+ private Boolean isIntermediate;
+ private Boolean isDeprecated;
public String getName() {
return name;
@@ -46,11 +45,35 @@ public class NodeListEntry {
this.address = address;
}
- public List getTypes() {
- return types;
+ public Boolean getSink() {
+ return isSink;
}
- public void setTypes(List types) {
- this.types = types;
+ public void setSink(Boolean sink) {
+ isSink = sink;
+ }
+
+ public Boolean getSource() {
+ return isSource;
+ }
+
+ public void setSource(Boolean source) {
+ isSource = source;
+ }
+
+ public Boolean getIntermediate() {
+ return isIntermediate;
+ }
+
+ public void setIntermediate(Boolean intermediate) {
+ isIntermediate = intermediate;
+ }
+
+ public Boolean getDeprecated() {
+ return isDeprecated;
+ }
+
+ public void setDeprecated(Boolean deprecated) {
+ isDeprecated = deprecated;
}
}
diff --git a/src/main/java/de/avatic/lcc/model/packaging/PackagingType.java b/src/main/java/de/avatic/lcc/model/packaging/PackagingType.java
index 602c0df..f78616f 100644
--- a/src/main/java/de/avatic/lcc/model/packaging/PackagingType.java
+++ b/src/main/java/de/avatic/lcc/model/packaging/PackagingType.java
@@ -1,7 +1,7 @@
package de.avatic.lcc.model.packaging;
-import de.avatic.lcc.dto.packaging.get.PackagingDimensionGetDTO;
+import de.avatic.lcc.dto.generic.DimensionDTO;
/**
* Represents the type of packaging used in the system.
@@ -11,7 +11,7 @@ import de.avatic.lcc.dto.packaging.get.PackagingDimensionGetDTO;
* - HU: Handling Unit.
*
* It is commonly utilized in packaging-related entities such as
- * {@link PackagingDimensionGetDTO} to specify the type
+ * {@link DimensionDTO} to specify the type
* of a particular packaging instance.
*/
public enum PackagingType {
diff --git a/src/main/java/de/avatic/lcc/model/premisses/Premiss.java b/src/main/java/de/avatic/lcc/model/premisses/Premiss.java
index 01913ac..32b2208 100644
--- a/src/main/java/de/avatic/lcc/model/premisses/Premiss.java
+++ b/src/main/java/de/avatic/lcc/model/premisses/Premiss.java
@@ -3,7 +3,7 @@ package de.avatic.lcc.model.premisses;
import de.avatic.lcc.model.materials.Material;
import de.avatic.lcc.model.nodes.Node;
import de.avatic.lcc.model.utils.DimensionUnit;
-import de.avatic.lcc.dto.packaging.get.PackagingGetDTO;
+import de.avatic.lcc.dto.configuration.packaging.view.PackagingViewDTO;
import de.avatic.lcc.model.utils.WeightUnit;
import de.avatic.lcc.model.user.SysUser;
import jakarta.validation.constraints.Digits;
@@ -89,7 +89,7 @@ public class Premiss {
private AggregateReference userSupplierNode;
@Column("packaging_id")
- private AggregateReference packaging;
+ private AggregateReference packaging;
@NotNull
private AggregateReference user;
@@ -273,11 +273,11 @@ public class Premiss {
this.userSupplierNode = userSupplierNode;
}
- public AggregateReference getPackaging() {
+ public AggregateReference getPackaging() {
return packaging;
}
- public void setPackaging(AggregateReference packaging) {
+ public void setPackaging(AggregateReference packaging) {
this.packaging = packaging;
}
diff --git a/src/main/java/de/avatic/lcc/model/users/User.java b/src/main/java/de/avatic/lcc/model/users/User.java
new file mode 100644
index 0000000..bc68887
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/model/users/User.java
@@ -0,0 +1,4 @@
+package de.avatic.lcc.model.users;
+
+public class User {
+}
diff --git a/src/main/java/de/avatic/lcc/repositories/country/CountryRepository.java b/src/main/java/de/avatic/lcc/repositories/CountryRepository.java
similarity index 97%
rename from src/main/java/de/avatic/lcc/repositories/country/CountryRepository.java
rename to src/main/java/de/avatic/lcc/repositories/CountryRepository.java
index 5507bd5..8ca6ff5 100644
--- a/src/main/java/de/avatic/lcc/repositories/country/CountryRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/CountryRepository.java
@@ -1,4 +1,4 @@
-package de.avatic.lcc.repositories.country;
+package de.avatic.lcc.repositories;
import de.avatic.lcc.model.country.Country;
import de.avatic.lcc.model.country.IsoCode;
@@ -88,7 +88,7 @@ public class CountryRepository {
if (filter != null) {
queryBuilder.append(" AND (iso_code LIKE ? OR region_code LIKE ?) ");
}
- queryBuilder.append(" LIMIT ? OFFSET ?");
+ queryBuilder.append("ORDER BY iso_code LIMIT ? OFFSET ?");
return queryBuilder.toString();
}
diff --git a/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java b/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java
index 6b2021e..883d28c 100644
--- a/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java
@@ -72,7 +72,7 @@ public class MaterialRepository {
if (filter != null) {
queryBuilder.append(" AND (name LIKE ? OR part_number LIKE ?) ");
}
- queryBuilder.append(" LIMIT ? OFFSET ?");
+ queryBuilder.append("ORDER BY normalized_part_number LIMIT ? OFFSET ?");
return queryBuilder.toString();
}
@@ -114,10 +114,9 @@ public class MaterialRepository {
}
@Transactional
- public Material update(Material material) {
+ public Optional update(Material material) {
String updateQuery = "UPDATE material SET name = ?, part_number = ?, normalized_part_number = ?, hs_code = ? WHERE id = ?";
- jdbcTemplate.update(updateQuery, material.getName(), material.getPartNumber(), material.getNormalizedPartNumber(), material.getHsCode(), material.getId());
- return material;
+ return Optional.ofNullable(jdbcTemplate.update(updateQuery, material.getName(), material.getPartNumber(), material.getNormalizedPartNumber(), material.getHsCode(), material.getId()) == 0 ? null : material.getId());
}
@Transactional
diff --git a/src/main/java/de/avatic/lcc/repositories/NodeRepository.java b/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
index eae08bc..a2d04fc 100644
--- a/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
@@ -1,13 +1,16 @@
package de.avatic.lcc.repositories;
import de.avatic.lcc.model.nodes.Node;
+import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
@Repository
public class NodeRepository {
@@ -28,7 +31,98 @@ public class NodeRepository {
FROM node
WHERE node.id = ?""";
- var node = jdbcTemplate.queryForObject(query, (rs, rowNum) -> {
+ var node = jdbcTemplate.queryForObject(query, new NodeMapper(), id);
+
+ return Optional.ofNullable(node);
+ }
+
+ private Map getPredecessorsOf(Integer id) {
+ String query = """
+ SELECT node_predecessor.predecessor_node_id, node_predecessor.sequence_number
+ FROM node_predecessor
+ WHERE node_predecessor.node_id = ? ORDER BY node_predecessor.sequence_number""";
+
+ return jdbcTemplate.query(query, rs -> {
+ Map predecessors = new HashMap<>();
+
+ while(rs.next()) {
+ predecessors.put(rs.getInt("sequence_number"), rs.getInt("predecessor_node_id"));
+ }
+
+ return predecessors;
+ }, id);
+ }
+
+ private Collection getOutboundCountriesOf(Integer id) {
+ String query = """
+ SELECT outbound_country_mapping.country_id
+ FROM outbound_country_mapping
+ WHERE outbound_country_mapping.node_id = ?""";
+
+ return jdbcTemplate.queryForList(query, Integer.class, id);
+ }
+
+ @Transactional
+ public SearchQueryResult listNodes(String filter, Boolean excludeDeprecated, SearchQueryPagination pagination) {
+ String query = buildQuery(filter, excludeDeprecated, pagination);
+
+ List entities = jdbcTemplate.query(query, new NodeMapper(), "%" + filter + "%", "%" + filter + "%", "%" + filter + "%", pagination.getLimit(), pagination.getOffset());
+ Integer totalCount = jdbcTemplate.queryForObject(buildCountQuery(filter, excludeDeprecated), Integer.class, "%" + filter + "%", "%" + filter + "%", "%" + filter + "%");
+
+ return new SearchQueryResult<>(entities, pagination.getPage(), totalCount, pagination.getLimit());
+ }
+
+ private String buildCountQuery(String filter, boolean excludeDeprecated) {
+ StringBuilder queryBuilder = new StringBuilder("""
+ SELECT COUNT(*)
+ FROM WHERE 1=1""");
+
+ if (excludeDeprecated) {
+ queryBuilder.append(" AND is_deprecated = FALSE");
+ }
+ if (filter != null) {
+ queryBuilder.append(" AND (name LIKE ? OR address LIKE ? OR country_iso_code LIKE ?)");
+ }
+
+ return queryBuilder.toString();
+ }
+
+ private String buildQuery(String filter, Boolean excludeDeprecated, SearchQueryPagination searchQueryPagination) {
+ StringBuilder queryBuilder = new StringBuilder("""
+ SELECT node.id AS id, node.name AS name, node.address as address, node.is_source as is_source,
+ node.is_sink as is_sink, node.is_intermediate as is_intermediate, node.country_id as country_id, node.predecessor_required as predecessor_required,
+ country.iso_code AS country_iso_code, country.region_code AS country_region_code, country.name AS country_name, country.is_deprecated AS country_is_deprecated
+ FROM node
+ LEFT JOIN country ON country.id = node.country_id
+ """);
+
+ if (excludeDeprecated) {
+ queryBuilder.append(" AND is_deprecated = FALSE");
+ }
+ if (filter != null) {
+ queryBuilder.append(" AND (name LIKE ? OR address LIKE ? OR country_iso_code LIKE ?)");
+ }
+ queryBuilder.append(" ORDER BY id LIMIT ? OFFSET ?");
+ return queryBuilder.toString();
+ }
+
+ @Transactional
+ public Optional setDeprecatedById(Integer id) {
+ String query = "UPDATE node SET is_deprecated = TRUE WHERE id = ?";
+ return Optional.ofNullable(jdbcTemplate.update(query, id) == 0 ? null : id);
+ }
+
+ @Transactional
+ public Optional update(Node node) {
+ //TODO update predecessors and outbound_countries too
+ String query = "UPDATE node SET";
+ return Optional.ofNullable(jdbcTemplate.update(query, node.getId()) == 0 ? null : node.getId());
+ }
+
+ private class NodeMapper implements RowMapper {
+
+ @Override
+ public Node mapRow(ResultSet rs, int rowNum) throws SQLException {
var data = new Node();
data.setId(rs.getInt("id"));
@@ -41,29 +135,9 @@ public class NodeRepository {
data.setPredecessorRequired(rs.getBoolean("predecessor_required"));
data.setNodePredecessors(getPredecessorsOf(data.getId()));
+ data.setOutboundCountries(getOutboundCountriesOf(data.getId()));
return data;
- }, id);
-
- return Optional.ofNullable(node);
- }
-
- private List getPredecessorsOf(Integer id) {
- String query = """
- SELECT node_predecessor.predecessor_node_id
- FROM node_predecessor
- WHERE node_predecessor.node_id = ? ORDER BY node_predecessor.sequence_number""";
-
- return jdbcTemplate.queryForList(query, Integer.class, id);
-
- }
-
- private Collection getOutboundCountriesOf(Integer id) {
- String query = """
- SELECT outbound_country_mapping.country_id
- FROM outbound_country_mapping
- WHERE outbound_country_mapping.node_id = ?""";
-
- return jdbcTemplate.queryForList(query, Integer.class, id);
+ }
}
}
diff --git a/src/main/java/de/avatic/lcc/repositories/packaging/PackagingRepository.java b/src/main/java/de/avatic/lcc/repositories/packaging/PackagingRepository.java
index e3b131a..31db385 100644
--- a/src/main/java/de/avatic/lcc/repositories/packaging/PackagingRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/packaging/PackagingRepository.java
@@ -81,7 +81,7 @@ public class PackagingRepository {
if (supplierId != null) {
queryBuilder.append(" AND supplier_node_id = ?");
}
- queryBuilder.append(" LIMIT ? OFFSET ?");
+ queryBuilder.append("ORDER BY id LIMIT ? OFFSET ?");
return queryBuilder.toString();
}
diff --git a/src/main/java/de/avatic/lcc/repositories/pagination/SearchQueryResult.java b/src/main/java/de/avatic/lcc/repositories/pagination/SearchQueryResult.java
index 96b5bf6..43cc7dd 100644
--- a/src/main/java/de/avatic/lcc/repositories/pagination/SearchQueryResult.java
+++ b/src/main/java/de/avatic/lcc/repositories/pagination/SearchQueryResult.java
@@ -1,6 +1,7 @@
package de.avatic.lcc.repositories.pagination;
import java.util.List;
+import java.util.function.Function;
/**
@@ -74,4 +75,11 @@ public class SearchQueryResult {
public Integer getElementsPerPage() {
return elementsPerPage;
}
+
+ public static SearchQueryResult map(SearchQueryResult queryResult, Function mapper) {
+ return new SearchQueryResult<>(queryResult.toList().stream().map(mapper).toList(),
+ queryResult.getPage(),
+ queryResult.getTotalElements(),
+ queryResult.getElementsPerPage());
+ }
}
diff --git a/src/main/java/de/avatic/lcc/repositories/users/GroupRepository.java b/src/main/java/de/avatic/lcc/repositories/users/GroupRepository.java
new file mode 100644
index 0000000..a4d9fc8
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/repositories/users/GroupRepository.java
@@ -0,0 +1,9 @@
+package de.avatic.lcc.repositories.users;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class GroupRepository {
+ public listGroups() {
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/repositories/users/UserRepository.java b/src/main/java/de/avatic/lcc/repositories/users/UserRepository.java
new file mode 100644
index 0000000..7a7b17d
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/repositories/users/UserRepository.java
@@ -0,0 +1,23 @@
+package de.avatic.lcc.repositories.users;
+
+import de.avatic.lcc.model.users.User;
+import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Repository
+public class UserRepository {
+
+ @Transactional
+ public SearchQueryResult listUsers(SearchQueryPagination pagination) {
+ String query = "SELECT * FROM users";
+ }
+
+ @Transactional
+ public void update(User user) {
+
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/MaterialService.java b/src/main/java/de/avatic/lcc/service/MaterialService.java
deleted file mode 100644
index 22872b2..0000000
--- a/src/main/java/de/avatic/lcc/service/MaterialService.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package de.avatic.lcc.service;
-
-import de.avatic.lcc.dto.material.get.MaterialGetDTO;
-import de.avatic.lcc.dto.material.get.MaterialPackagingGetDTO;
-import de.avatic.lcc.dto.material.post.MaterialPostDTO;
-import de.avatic.lcc.model.country.Country;
-import de.avatic.lcc.model.materials.Material;
-import de.avatic.lcc.dto.material.get.MaterialListGetDTO;
-import de.avatic.lcc.model.nodes.Node;
-import de.avatic.lcc.model.packaging.PackagingDimension;
-import de.avatic.lcc.repositories.country.CountryRepository;
-import de.avatic.lcc.repositories.MaterialRepository;
-import de.avatic.lcc.repositories.NodeRepository;
-import de.avatic.lcc.repositories.packaging.PackagingDimensionRepository;
-import de.avatic.lcc.repositories.packaging.PackagingRepository;
-import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
-import de.avatic.lcc.repositories.pagination.SearchQueryResult;
-import de.avatic.lcc.service.transformer.MaterialTransformerService;
-import de.avatic.lcc.util.Check;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class MaterialService {
-
- private final MaterialTransformerService materialTransformerService;
- private final PackagingRepository packagingRepository;
- private final CountryRepository countryRepository;
- private final NodeRepository nodeRepository;
- private final PackagingDimensionRepository packagingDimensionRepository;
- private final MaterialRepository materialRepository;
-
- public MaterialService(MaterialRepository materialRepository, MaterialTransformerService materialTransformerService, PackagingRepository packagingRepository, CountryRepository countryRepository, NodeRepository nodeRepository, PackagingDimensionRepository packagingDimensionRepository) {
- this.materialRepository = materialRepository;
- this.materialTransformerService = materialTransformerService;
- this.packagingRepository = packagingRepository;
- this.countryRepository = countryRepository;
- this.nodeRepository = nodeRepository;
- this.packagingDimensionRepository = packagingDimensionRepository;
- }
-
- public SearchQueryResult listMaterial(String filter, int page, int limit) {
- SearchQueryResult queryResult = materialRepository.listMaterials(filter, true, new SearchQueryPagination(page, limit));
- List dto = queryResult.toList().stream().map(materialTransformerService::convertToMaterialListGetDTO).toList();
- return new SearchQueryResult<>(dto, queryResult.getPage(), queryResult.getTotalElements(), queryResult.getElementsPerPage());
- }
-
- public MaterialGetDTO getMaterial(Integer id) {
-
- List packaging = packagingRepository.getByMaterialId(id).stream().map(p -> {
-
- Optional supplier = nodeRepository.getById(p.getSupplierId());
- Optional country = countryRepository.getById(supplier.orElseThrow().getCountryId());
- Optional hu = packagingDimensionRepository.getById(p.getHuId());
- Optional shu = packagingDimensionRepository.getById(p.getShuId());
-
- return materialTransformerService.convertToMaterialPackagingGetDTO(p, supplier, country, hu, shu);
- }).toList();
-
- return materialTransformerService.convertToMaterialGetDTO(materialRepository.getById(id)).orElseThrow(() -> new RuntimeException("Material not found with id " + id));
- }
-
- public void updateMaterial(Integer id, MaterialPostDTO dto) {
-
- //check consistency
- Check.equals(id, dto.getId());
- materialRepository.update(materialTransformerService.convertFromMaterialPostDTO(dto));
- }
-
- public Integer createMaterial(MaterialPostDTO dto) {
- return materialRepository.create(materialTransformerService.convertFromMaterialPostDTO(dto)).orElseThrow(() -> new RuntimeException("Unable to create Material " + dto));
- }
-
- public Integer deleteMaterial(Integer id) {
- return materialRepository.setDeprecatedById(id).orElseThrow(() -> new RuntimeException("Packaging does not exists " + id));
-
- }
-}
diff --git a/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java b/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java
new file mode 100644
index 0000000..eb2b25f
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java
@@ -0,0 +1,12 @@
+package de.avatic.lcc.service.bulk;
+
+import de.avatic.lcc.dto.bulk.BulkFileType;
+import org.springframework.core.io.InputStreamSource;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BulkExportService {
+ public InputStreamSource generateExport(BulkFileType bulkFileType) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/bulk/BulkFileProcessingService.java b/src/main/java/de/avatic/lcc/service/bulk/BulkFileProcessingService.java
new file mode 100644
index 0000000..2ba9994
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/bulk/BulkFileProcessingService.java
@@ -0,0 +1,13 @@
+package de.avatic.lcc.service.bulk;
+
+import de.avatic.lcc.dto.bulk.BulkFileType;
+import org.springframework.core.io.InputStreamSource;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BulkFileProcessingService {
+
+ public InputStreamSource generateExport(BulkFileType type) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/bulk/TemplateGenerationService.java b/src/main/java/de/avatic/lcc/service/bulk/TemplateGenerationService.java
new file mode 100644
index 0000000..8bd616b
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/bulk/TemplateGenerationService.java
@@ -0,0 +1,12 @@
+package de.avatic.lcc.service.bulk;
+
+import de.avatic.lcc.dto.bulk.BulkFileType;
+import org.springframework.core.io.InputStreamSource;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TemplateGenerationService {
+
+ public InputStreamSource generateTemplate(BulkFileType bulkFileType) {
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/calculation/CalclationSearchStringAnalyzerService.java b/src/main/java/de/avatic/lcc/service/calculation/CalclationSearchStringAnalyzerService.java
new file mode 100644
index 0000000..f0f4941
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/calculation/CalclationSearchStringAnalyzerService.java
@@ -0,0 +1,12 @@
+package de.avatic.lcc.service.calculation;
+
+import de.avatic.lcc.dto.calculation.SearchDTO;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CalclationSearchStringAnalyzerService {
+
+ public SearchDTO findMaterialAndSuppliers(String search) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/calculation/CalculationCreationService.java b/src/main/java/de/avatic/lcc/service/calculation/CalculationCreationService.java
new file mode 100644
index 0000000..5ade25f
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/calculation/CalculationCreationService.java
@@ -0,0 +1,13 @@
+package de.avatic.lcc.service.calculation;
+
+import de.avatic.lcc.dto.calculation.view.PremiseViewDTO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CalculationCreationService {
+ public List createCalculations(List materialIds, List supplierIds, List userSupplierIds, boolean createEmpty) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/calculation/PremisesService.java b/src/main/java/de/avatic/lcc/service/calculation/PremisesService.java
new file mode 100644
index 0000000..7d58fdc
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/calculation/PremisesService.java
@@ -0,0 +1,23 @@
+package de.avatic.lcc.service.calculation;
+
+import de.avatic.lcc.dto.calculation.PremiseDTO;
+import de.avatic.lcc.dto.calculation.view.PremiseViewDTO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PremisesService {
+
+ public List listCalculation(String filter, Integer page, Integer limit, Integer userId, Boolean deleted, Boolean archived, Boolean done) {
+ return null;
+ };
+
+ public List getPremises(List premissIds) {
+ return null;
+ }
+
+ public void savePremises(List premises) {
+
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/CountryService.java b/src/main/java/de/avatic/lcc/service/configuration/CountryService.java
similarity index 60%
rename from src/main/java/de/avatic/lcc/service/CountryService.java
rename to src/main/java/de/avatic/lcc/service/configuration/CountryService.java
index c8cade0..6d816f4 100644
--- a/src/main/java/de/avatic/lcc/service/CountryService.java
+++ b/src/main/java/de/avatic/lcc/service/configuration/CountryService.java
@@ -1,18 +1,18 @@
-package de.avatic.lcc.service;
+package de.avatic.lcc.service.configuration;
-import de.avatic.lcc.dto.countries.get.CountryGetDTO;
-import de.avatic.lcc.dto.countries.get.CountryListGetDTO;
-import de.avatic.lcc.dto.countries.post.CountryPostDTO;
-import de.avatic.lcc.model.country.Country;
+import de.avatic.lcc.dto.configuration.countries.view.CountryViewDTO;
+import de.avatic.lcc.dto.configuration.countries.update.CountryUpdateDTO;
+import de.avatic.lcc.dto.generic.CountryDTO;
import de.avatic.lcc.model.properties.CountryProperty;
import de.avatic.lcc.model.properties.CountryPropertyType;
import de.avatic.lcc.model.properties.PropertySet;
import de.avatic.lcc.repositories.properties.CountryPropertiesRepository;
-import de.avatic.lcc.repositories.country.CountryRepository;
+import de.avatic.lcc.repositories.CountryRepository;
import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
import de.avatic.lcc.repositories.pagination.SearchQueryResult;
import de.avatic.lcc.repositories.properties.SystemPropertiesRepository;
-import de.avatic.lcc.service.transformer.CountryTransformerService;
+import de.avatic.lcc.service.transformer.country.CountryTransformerService;
+import de.avatic.lcc.service.transformer.generic.CountryDTOTransformer;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -25,38 +25,28 @@ public class CountryService {
private final CountryTransformerService countryTransformerService;
private final CountryPropertiesRepository countryPropertiesRepository;
private final SystemPropertiesRepository systemPropertiesRepository;
+ private final CountryDTOTransformer countryDTOTransformer;
- public CountryService(CountryRepository countryRepository, CountryTransformerService countryTransformerService, CountryPropertiesRepository countryPropertiesRepository, SystemPropertiesRepository systemPropertiesRepository) {
+ public CountryService(CountryRepository countryRepository, CountryTransformerService countryTransformerService, CountryPropertiesRepository countryPropertiesRepository, SystemPropertiesRepository systemPropertiesRepository, CountryDTOTransformer countryDTOTransformer) {
this.countryRepository = countryRepository;
this.countryTransformerService = countryTransformerService;
this.countryPropertiesRepository = countryPropertiesRepository;
this.systemPropertiesRepository = systemPropertiesRepository;
+ this.countryDTOTransformer = countryDTOTransformer;
}
- public SearchQueryResult listMaterial(String filter, int page, int limit) {
- SearchQueryResult queryResult = countryRepository.listCountries(filter, true, new SearchQueryPagination(page, limit));
-
- List dto = queryResult.toList().stream().map(country -> {
- CountryListGetDTO dtoEntry = new CountryListGetDTO();
-
- dtoEntry.setId(country.getId());
- dtoEntry.setIsoCode(country.getIsoCode().getCode());
- dtoEntry.setName(country.getIsoCode().getFullName());
- dtoEntry.setRegionCode(country.getRegionCode().getCode());
-
- return dtoEntry;
- }).toList();
-
- return new SearchQueryResult<>(dto, queryResult.getPage(), queryResult.getTotalElements(), queryResult.getElementsPerPage() );
+ public SearchQueryResult listCountries(String filter, int page, int limit) {
+ return SearchQueryResult.map(countryRepository.listCountries(filter, true, new SearchQueryPagination(page, limit)), countryDTOTransformer::toCountryDTO);
}
- public CountryGetDTO getCountry(Integer id) {
+ @Transactional
+ public CountryViewDTO getCountry(Integer id) {
List properties = countryPropertiesRepository.listByCountryId(id);
return countryTransformerService.convertToCountryGetDTO(countryRepository.getById(id), properties).orElseThrow();
}
@Transactional
- public void updateCountry(Integer id, CountryPostDTO dto) {
+ public void updateCountry(Integer id, CountryUpdateDTO dto) {
List types = countryPropertiesRepository.listTypes();
PropertySet set = systemPropertiesRepository.getDraftSet();
diff --git a/src/main/java/de/avatic/lcc/service/configuration/MaterialService.java b/src/main/java/de/avatic/lcc/service/configuration/MaterialService.java
new file mode 100644
index 0000000..3b2eb6c
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/configuration/MaterialService.java
@@ -0,0 +1,69 @@
+package de.avatic.lcc.service.configuration;
+
+import de.avatic.lcc.dto.configuration.material.view.MaterialViewDTO;
+import de.avatic.lcc.dto.configuration.material.update.MaterialUpdateDTO;
+import de.avatic.lcc.model.materials.Material;
+import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.repositories.CountryRepository;
+import de.avatic.lcc.repositories.MaterialRepository;
+import de.avatic.lcc.repositories.NodeRepository;
+import de.avatic.lcc.repositories.packaging.PackagingDimensionRepository;
+import de.avatic.lcc.repositories.packaging.PackagingRepository;
+import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.service.transformer.material.MaterialUpdateDTOTransformer;
+import de.avatic.lcc.service.transformer.material.MaterialViewDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.DimensionDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.MaterialDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
+import de.avatic.lcc.util.exception.clienterror.MaterialNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MaterialService {
+
+ private final MaterialUpdateDTOTransformer materialUpdateDTOTransformer;
+ private final PackagingRepository packagingRepository;
+ private final CountryRepository countryRepository;
+ private final NodeRepository nodeRepository;
+ private final PackagingDimensionRepository packagingDimensionRepository;
+ private final MaterialRepository materialRepository;
+ private final MaterialDTOTransformer materialDTOTransformer;
+ private final DimensionDTOTransformer dimensionDTOTransformer;
+ private final NodeDTOTransformer nodeDTOTransformer;
+ private final MaterialViewDTOTransformer materialViewDTOTransformer;
+
+ public MaterialService(MaterialRepository materialRepository, MaterialUpdateDTOTransformer materialUpdateDTOTransformer, PackagingRepository packagingRepository, CountryRepository countryRepository, NodeRepository nodeRepository, PackagingDimensionRepository packagingDimensionRepository, MaterialDTOTransformer materialDTOTransformer, DimensionDTOTransformer dimensionDTOTransformer, NodeDTOTransformer nodeDTOTransformer, MaterialViewDTOTransformer materialViewDTOTransformer) {
+ this.materialRepository = materialRepository;
+ this.materialUpdateDTOTransformer = materialUpdateDTOTransformer;
+ this.packagingRepository = packagingRepository;
+ this.countryRepository = countryRepository;
+ this.nodeRepository = nodeRepository;
+ this.packagingDimensionRepository = packagingDimensionRepository;
+ this.materialDTOTransformer = materialDTOTransformer;
+ this.dimensionDTOTransformer = dimensionDTOTransformer;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ this.materialViewDTOTransformer = materialViewDTOTransformer;
+ }
+
+ public SearchQueryResult listMaterial(String filter, int page, int limit) {
+ SearchQueryResult queryResult = materialRepository.listMaterials(filter, true, new SearchQueryPagination(page, limit));
+ return SearchQueryResult.map(queryResult, materialDTOTransformer::toMaterialDTO);
+ }
+
+ public MaterialViewDTO getMaterial(Integer id) {
+ return materialViewDTOTransformer.toMaterialViewDTO(materialRepository.getById(id).orElseThrow(() -> new MaterialNotFoundException(id)));
+ }
+
+ public Integer updateMaterial(Integer id, MaterialUpdateDTO dto) {
+ return materialRepository.update(materialUpdateDTOTransformer.fromMaterialUpdateDTO(dto)).orElseThrow(() -> new MaterialNotFoundException(id));
+ }
+
+ public Integer createMaterial(MaterialUpdateDTO dto) {
+ return materialRepository.create(materialUpdateDTOTransformer.fromMaterialUpdateDTO(dto)).orElseThrow(() -> new RuntimeException("Unable to create Material " + dto));
+ }
+
+ public Integer deleteMaterial(Integer id) {
+ return materialRepository.setDeprecatedById(id).orElseThrow(() -> new MaterialNotFoundException(id));
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/configuration/NodeService.java b/src/main/java/de/avatic/lcc/service/configuration/NodeService.java
new file mode 100644
index 0000000..911f67b
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/configuration/NodeService.java
@@ -0,0 +1,49 @@
+package de.avatic.lcc.service.configuration;
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.configuration.nodes.view.NodeViewDTO;
+import de.avatic.lcc.dto.configuration.nodes.update.NodeUpdateDTO;
+import de.avatic.lcc.repositories.NodeRepository;
+import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.service.transformer.nodes.NodeUpdateDTOTransformer;
+import de.avatic.lcc.service.transformer.nodes.NodeViewDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
+import de.avatic.lcc.util.exception.clienterror.NodeNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service
+public class NodeService {
+
+ private final NodeRepository nodeRepository;
+ private final NodeDTOTransformer nodeDTOTransformer;
+ private final NodeViewDTOTransformer nodeViewDTOTransformer;
+ private final NodeUpdateDTOTransformer nodeUpdateDTOTransformer;
+
+ public NodeService(NodeRepository nodeRepository, NodeDTOTransformer nodeDTOTransformer, NodeViewDTOTransformer nodeViewDTOTransformer, NodeUpdateDTOTransformer nodeUpdateDTOTransformer) {
+ this.nodeRepository = nodeRepository;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ this.nodeViewDTOTransformer = nodeViewDTOTransformer;
+ this.nodeUpdateDTOTransformer = nodeUpdateDTOTransformer;
+ }
+
+ public SearchQueryResult listNodes(String filter, int page, int limit) {
+ return SearchQueryResult.map(nodeRepository.listNodes(filter, true, new SearchQueryPagination(page, limit)), nodeDTOTransformer::toNodeDTO);
+ }
+
+ public SearchQueryResult listNodesView(String filter, int page, int limit) {
+ return SearchQueryResult.map(nodeRepository.listNodes(filter, true, new SearchQueryPagination(page, limit)), nodeViewDTOTransformer::toNodeViewDTO);
+ }
+
+ public NodeViewDTO getNode(Integer id) {
+ return nodeViewDTOTransformer.toNodeViewDTO(nodeRepository.getById(id).orElseThrow(() -> new NodeNotFoundException(id)));
+ }
+
+ public Integer deleteNode(Integer id) {
+ return nodeRepository.setDeprecatedById(id).orElseThrow(() -> new NodeNotFoundException(id));
+ }
+
+ public Integer updateNode(NodeUpdateDTO dto) {
+ return nodeRepository.update(nodeUpdateDTOTransformer.fromNodeUpdateDTO(dto)).orElseThrow(() -> new NodeNotFoundException(dto.getId()));
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/PackagingService.java b/src/main/java/de/avatic/lcc/service/configuration/PackagingService.java
similarity index 61%
rename from src/main/java/de/avatic/lcc/service/PackagingService.java
rename to src/main/java/de/avatic/lcc/service/configuration/PackagingService.java
index 82866b2..8608a62 100644
--- a/src/main/java/de/avatic/lcc/service/PackagingService.java
+++ b/src/main/java/de/avatic/lcc/service/configuration/PackagingService.java
@@ -1,7 +1,7 @@
-package de.avatic.lcc.service;
+package de.avatic.lcc.service.configuration;
-import de.avatic.lcc.dto.packaging.get.PackagingGetDTO;
-import de.avatic.lcc.dto.packaging.post.PackagingPostDTO;
+import de.avatic.lcc.dto.configuration.packaging.update.PackagingUpdateDTO;
+import de.avatic.lcc.dto.configuration.packaging.view.PackagingViewDTO;
import de.avatic.lcc.model.country.Country;
import de.avatic.lcc.model.materials.Material;
import de.avatic.lcc.model.nodes.Node;
@@ -9,19 +9,18 @@ import de.avatic.lcc.model.packaging.Packaging;
import de.avatic.lcc.model.packaging.PackagingDimension;
import de.avatic.lcc.model.packaging.PackagingProperty;
import de.avatic.lcc.model.packaging.PackagingPropertyType;
-import de.avatic.lcc.model.properties.CountryPropertyType;
-import de.avatic.lcc.model.properties.PropertySet;
+import de.avatic.lcc.repositories.CountryRepository;
import de.avatic.lcc.repositories.MaterialRepository;
import de.avatic.lcc.repositories.NodeRepository;
-import de.avatic.lcc.repositories.country.CountryRepository;
import de.avatic.lcc.repositories.packaging.PackagingDimensionRepository;
import de.avatic.lcc.repositories.packaging.PackagingRepository;
import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
import de.avatic.lcc.repositories.pagination.SearchQueryResult;
import de.avatic.lcc.repositories.properties.PackagingPropertiesRepository;
-import de.avatic.lcc.service.transformer.DimensionTransformerService;
-import de.avatic.lcc.service.transformer.NodeTransformerService;
-import de.avatic.lcc.service.transformer.PackagingTransformerService;
+import de.avatic.lcc.service.transformer.packaging.PackagingTransformerService;
+import de.avatic.lcc.service.transformer.generic.DimensionDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.MaterialDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
import de.avatic.lcc.util.Check;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -38,8 +37,11 @@ public class PackagingService {
private final CountryRepository countryRepository;
private final PackagingTransformerService packagingTransformerService;
private final PackagingPropertiesRepository packagingPropertiesRepository;
+ private final MaterialDTOTransformer materialDTOTransformer;
+ private final NodeDTOTransformer nodeDTOTransformer;
+ private final DimensionDTOTransformer dimensionDTOTransformer;
- public PackagingService(PackagingRepository packagingRepository, PackagingDimensionRepository packagingDimensionRepository, NodeRepository nodeRepository, MaterialRepository materialRepository, DimensionTransformerService dimensionTransformerService, NodeTransformerService nodeTransformerService, CountryRepository countryRepository, PackagingTransformerService packagingTransformerService, PackagingPropertiesRepository packagingPropertiesRepository) {
+ public PackagingService(PackagingRepository packagingRepository, PackagingDimensionRepository packagingDimensionRepository, NodeRepository nodeRepository, MaterialRepository materialRepository, CountryRepository countryRepository, PackagingTransformerService packagingTransformerService, PackagingPropertiesRepository packagingPropertiesRepository, MaterialDTOTransformer materialDTOTransformer, NodeDTOTransformer nodeDTOTransformer, DimensionDTOTransformer dimensionDTOTransformer) {
this.packagingRepository = packagingRepository;
this.packagingDimensionRepository = packagingDimensionRepository;
this.nodeRepository = nodeRepository;
@@ -47,33 +49,29 @@ public class PackagingService {
this.countryRepository = countryRepository;
this.packagingTransformerService = packagingTransformerService;
this.packagingPropertiesRepository = packagingPropertiesRepository;
+ this.materialDTOTransformer = materialDTOTransformer;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ this.dimensionDTOTransformer = dimensionDTOTransformer;
}
@Transactional
- public SearchQueryResult listPackaging(Integer materialId, Integer supplierId, int page, int limit) {
- SearchQueryResult queryResult = packagingRepository.listPackaging(materialId, supplierId, true, new SearchQueryPagination(page, limit));
+ public SearchQueryResult listPackaging(Integer materialId, Integer supplierId, int page, int limit) {
+ return SearchQueryResult.map(packagingRepository.listPackaging(materialId, supplierId, true, new SearchQueryPagination(page, limit)), this::toPackagingGetDTO);
+ }
- List dto = queryResult.toList().stream().map(packaging -> {
- PackagingGetDTO dtoEntry = new PackagingGetDTO();
-
- Optional node = nodeRepository.getById(packaging.getSupplierId());
- Optional country = countryRepository.getById(node.orElseThrow().getCountryId());
- Optional material = materialRepository.getById(packaging.getMaterialId());
-
- dtoEntry.setHu(packagingTransformerService.convertToPackagingDimensionDTO(packagingDimensionRepository.getById(packaging.getHuId())).orElseThrow());
- dtoEntry.setShu(packagingTransformerService.convertToPackagingDimensionDTO(packagingDimensionRepository.getById(packaging.getShuId())).orElseThrow());
- dtoEntry.setSupplier(packagingTransformerService.convertToPackagingSupplierDTO(node, country).orElseThrow());
- dtoEntry.setMaterial(packagingTransformerService.convertToPackagingMaterialDTO(material).orElseThrow());
-
- return dtoEntry;
-
- }).toList();
-
- return new SearchQueryResult<>(dto, queryResult.getPage(), queryResult.getTotalElements(), queryResult.getElementsPerPage());
+ private PackagingViewDTO toPackagingGetDTO(Packaging packaging) {
+ PackagingViewDTO dtoEntry = new PackagingViewDTO();
+ Optional node = nodeRepository.getById(packaging.getSupplierId());
+ Optional material = materialRepository.getById(packaging.getMaterialId());
+ dtoEntry.setHu(dimensionDTOTransformer.toDimensionDTO(packagingDimensionRepository.getById(packaging.getHuId()).orElseThrow()));
+ dtoEntry.setShu(dimensionDTOTransformer.toDimensionDTO(packagingDimensionRepository.getById(packaging.getShuId()).orElseThrow()));
+ dtoEntry.setSupplier(nodeDTOTransformer.toNodeDTO(node.orElseThrow()));
+ dtoEntry.setMaterial(materialDTOTransformer.toMaterialDTO(material.orElseThrow()));
+ return dtoEntry;
}
@Transactional
- public PackagingGetDTO getPackaging(Integer id) {
+ public PackagingViewDTO getPackaging(Integer id) {
Optional packaging = packagingRepository.getById(id);
Optional material = materialRepository.getById(packaging.orElseThrow().getMaterialId());
@@ -88,7 +86,7 @@ public class PackagingService {
}
@Transactional
- public void updatePackaging(Integer id, PackagingPostDTO dto) {
+ public void updatePackaging(Integer id, PackagingUpdateDTO dto) {
Optional entity = packagingRepository.getById(id);
if (entity.isEmpty()) throw new RuntimeException("Packaging does not exists " + id);
@@ -98,8 +96,8 @@ public class PackagingService {
Check.equals(dto.getHu().getId(), entity.get().getHuId());
Check.equals(dto.getId(), id);
- packagingDimensionRepository.update(packagingTransformerService.convertFromPackagingDimensionPostDTO(dto.getHu()));
- packagingDimensionRepository.update(packagingTransformerService.convertFromPackagingDimensionPostDTO(dto.getShu()));
+ packagingDimensionRepository.update(dimensionDTOTransformer.toDimensionEntity(dto.getHu()));
+ packagingDimensionRepository.update(dimensionDTOTransformer.toDimensionEntity(dto.getShu()));
List types = packagingPropertiesRepository.listTypes();
@@ -119,10 +117,10 @@ public class PackagingService {
}
@Transactional
- public Integer createPackaging(PackagingPostDTO dto) {
+ public Integer createPackaging(PackagingUpdateDTO dto) {
- Optional huId = packagingDimensionRepository.insert(packagingTransformerService.convertFromPackagingDimensionPostDTO(dto.getHu()));
- Optional shuId = packagingDimensionRepository.insert(packagingTransformerService.convertFromPackagingDimensionPostDTO(dto.getShu()));
+ Optional huId = packagingDimensionRepository.insert(dimensionDTOTransformer.toDimensionEntity(dto.getHu()));
+ Optional shuId = packagingDimensionRepository.insert(dimensionDTOTransformer.toDimensionEntity(dto.getShu()));
Packaging entity = packagingTransformerService.convertFromPackagingPostDTO(dto);
diff --git a/src/main/java/de/avatic/lcc/service/PropertiesService.java b/src/main/java/de/avatic/lcc/service/configuration/PropertiesService.java
similarity index 81%
rename from src/main/java/de/avatic/lcc/service/PropertiesService.java
rename to src/main/java/de/avatic/lcc/service/configuration/PropertiesService.java
index ee9ee26..bf492dd 100644
--- a/src/main/java/de/avatic/lcc/service/PropertiesService.java
+++ b/src/main/java/de/avatic/lcc/service/configuration/PropertiesService.java
@@ -1,6 +1,6 @@
-package de.avatic.lcc.service;
+package de.avatic.lcc.service.configuration;
-import de.avatic.lcc.dto.properties.post.PropertiesPostDTO;
+import de.avatic.lcc.dto.configuration.properties.post.PropertiesPostDTO;
import de.avatic.lcc.model.properties.PropertyType;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/avatic/lcc/service/report/ExcelReportingService.java b/src/main/java/de/avatic/lcc/service/report/ExcelReportingService.java
new file mode 100644
index 0000000..455b624
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/report/ExcelReportingService.java
@@ -0,0 +1,17 @@
+package de.avatic.lcc.service.report;
+
+import org.springframework.stereotype.Service;
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+@Service
+public class ExcelReportingService {
+
+
+ public ByteArrayInputStream generateExcelReport(Integer materialId, List nodeIds) {
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/report/ReportFinderService.java b/src/main/java/de/avatic/lcc/service/report/ReportFinderService.java
new file mode 100644
index 0000000..002a45e
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/report/ReportFinderService.java
@@ -0,0 +1,16 @@
+package de.avatic.lcc.service.report;
+
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ReportFinderService {
+
+
+ public List> findSupplierForReporting(Integer materialId) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/report/ReportingService.java b/src/main/java/de/avatic/lcc/service/report/ReportingService.java
new file mode 100644
index 0000000..e26e086
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/report/ReportingService.java
@@ -0,0 +1,13 @@
+package de.avatic.lcc.service.report;
+
+import de.avatic.lcc.dto.report.ReportDTO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ReportingService {
+ public ReportDTO getReport(Integer materialId, List nodeIds) {
+ return null;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/DimensionTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/DimensionTransformerService.java
deleted file mode 100644
index b9c0469..0000000
--- a/src/main/java/de/avatic/lcc/service/transformer/DimensionTransformerService.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package de.avatic.lcc.service.transformer;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class DimensionTransformerService {
-
-
-
-}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/MaterialTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/MaterialTransformerService.java
deleted file mode 100644
index 3bae441..0000000
--- a/src/main/java/de/avatic/lcc/service/transformer/MaterialTransformerService.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package de.avatic.lcc.service.transformer;
-
-import de.avatic.lcc.dto.generic.NodeTypeDTO;
-import de.avatic.lcc.dto.material.get.*;
-import de.avatic.lcc.dto.material.post.MaterialPostDTO;
-import de.avatic.lcc.dto.packaging.get.PackagingCountryGetDTO;
-import de.avatic.lcc.dto.packaging.get.PackagingDimensionGetDTO;
-import de.avatic.lcc.model.country.Country;
-import de.avatic.lcc.model.materials.Material;
-import de.avatic.lcc.model.nodes.Node;
-import de.avatic.lcc.model.packaging.Packaging;
-import de.avatic.lcc.model.packaging.PackagingDimension;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Optional;
-
-@Service
-public class MaterialTransformerService {
-
- public Material convertFromMaterialPostDTO(MaterialPostDTO dto) {
- Material entity = new Material();
-
- entity.setNormalizedPartNumber(normalizePartNumber(dto.getPartNumber()));
- entity.setPartNumber(dto.getPartNumber());
- entity.setName(dto.getName());
- entity.setDeprecated(false);
- entity.setId(dto.getId());
- entity.setHsCode(dto.getHsCode());
-
- return entity;
- }
-
- private String normalizePartNumber(String partNumber) {
- if (partNumber.length() > 12) throw new IllegalArgumentException("Part number must be less than 12 characters");
- return "000000000000".concat(partNumber).substring(partNumber.length());
- }
-
- public Optional convertToMaterialGetDTO(Optional material) {
-
- if (material.isEmpty()) return Optional.empty();
- Material entity = material.get();
-
- MaterialGetDTO dtoEntry = new MaterialGetDTO();
-
- dtoEntry.setId(entity.getId());
- dtoEntry.setPartNumber(entity.getPartNumber());
- dtoEntry.setName(entity.getName());
- dtoEntry.setHsCode(entity.getHsCode());
-
- return Optional.of(dtoEntry);
-
- }
-
- public MaterialListGetDTO convertToMaterialListGetDTO(Material entity) {
-
- MaterialListGetDTO dtoEntry = new MaterialListGetDTO();
-
- dtoEntry.setId(entity.getId());
- dtoEntry.setPartNumber(entity.getPartNumber());
- dtoEntry.setName(entity.getName());
- dtoEntry.setHsCode(entity.getHsCode());
-
- return dtoEntry;
-
-
- }
-
- public MaterialPackagingGetDTO convertToMaterialPackagingGetDTO(Packaging entity, Optional supplier, Optional country, Optional hu, Optional shu) {
-
- MaterialPackagingGetDTO dto = new MaterialPackagingGetDTO();
-
- dto.setId(entity.getId());
- dto.setDeprecated(entity.getDeprecated());
- dto.setHu(convertToMaterialDimensionGetDTO(hu).orElseThrow());
- dto.setShu(convertToMaterialDimensionGetDTO(shu).orElseThrow());
- dto.setSupplier(convertToMaterialSupplierGetDTO(supplier, country).orElseThrow());
-
- return dto;
-
- }
-
- private Optional convertToMaterialSupplierGetDTO(Optional entity, Optional country) {
-
- if(entity.isEmpty()) return Optional.empty();
- Node data = entity.get();
-
- MaterialSupplierGetDTO dto = new MaterialSupplierGetDTO();
-
- dto.setId(data.getId());
- dto.setAddress(data.getAddress());
- dto.setName(data.getName());
- dto.setDeprecated(data.getDeprecated());
- dto.setTypes(toNodeTypeArrayList(data));
- dto.setCountry(convertToMaterialCountryGetDTO(country).orElseThrow());
-
- return Optional.of(dto);
- }
-
- private Optional convertToMaterialCountryGetDTO(Optional country) {
- if (country.isEmpty()) return Optional.empty();
-
- Country data = country.get();
- MaterialCountryGetDTO dto = new MaterialCountryGetDTO();
-
- dto.setId(data.getId());
- dto.setRegionCode(data.getRegionCode().name());
- dto.setIsoCode(data.getIsoCode().name());
-
- return Optional.of(dto);
- }
-
- private ArrayList toNodeTypeArrayList(Node entity) {
- ArrayList types = new ArrayList<>();
- if (entity.getSink()) types.add(NodeTypeDTO.SINK);
- if (entity.getSource()) types.add(NodeTypeDTO.SOURCE);
- if (entity.getIntermediate()) types.add(NodeTypeDTO.INTERMEDIATE);
- return types;
- }
-
- private Optional convertToMaterialDimensionGetDTO(Optional data) {
- if (data.isEmpty()) return Optional.empty();
-
- PackagingDimension dimension = data.get();
- MaterialDimensionGetDTO dto = new MaterialDimensionGetDTO();
-
- dto.setId(dimension.getId());
- dto.setType(dimension.getType());
- dto.setLength(dimension.getDimensionUnit().convertFromMM(dimension.getLength()).doubleValue());
- dto.setWidth(dimension.getDimensionUnit().convertFromMM(dimension.getWidth()).doubleValue());
- dto.setHeight(dimension.getDimensionUnit().convertFromMM(dimension.getHeight()).doubleValue());
- dto.setDimensionUnit(dimension.getDimensionUnit());
- dto.setWeight(dimension.getWeightUnit().convertFromG(dimension.getWeight()).doubleValue());
- dto.setWeightUnit(dimension.getWeightUnit());
- dto.setContentUnitCount(dimension.getContentUnitCount());
- dto.setDeprecated(dimension.getDeprecated());
-
- return Optional.of(dto);
-
- }
-}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/NodeTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/NodeTransformerService.java
deleted file mode 100644
index 638db55..0000000
--- a/src/main/java/de/avatic/lcc/service/transformer/NodeTransformerService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.avatic.lcc.service.transformer;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class NodeTransformerService {
-
- private final CountryTransformerService countryTransformerService;
-
- public NodeTransformerService(CountryTransformerService countryTransformerService) {
- this.countryTransformerService = countryTransformerService;
- }
-
-
-
-}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/PackagingTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/PackagingTransformerService.java
deleted file mode 100644
index 214f2c0..0000000
--- a/src/main/java/de/avatic/lcc/service/transformer/PackagingTransformerService.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package de.avatic.lcc.service.transformer;
-
-import de.avatic.lcc.dto.generic.NodeTypeDTO;
-import de.avatic.lcc.dto.packaging.get.*;
-import de.avatic.lcc.dto.packaging.post.PackagingDimensionPostDTO;
-import de.avatic.lcc.dto.packaging.post.PackagingPostDTO;
-import de.avatic.lcc.model.country.Country;
-import de.avatic.lcc.model.materials.Material;
-import de.avatic.lcc.model.nodes.Node;
-import de.avatic.lcc.model.packaging.Packaging;
-import de.avatic.lcc.model.packaging.PackagingDimension;
-import de.avatic.lcc.model.packaging.PackagingProperty;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class PackagingTransformerService {
-
-
- public Optional convertToPackagingDimensionDTO(Optional data) {
-
- if (data.isEmpty()) return Optional.empty();
-
- PackagingDimension dimension = data.get();
- PackagingDimensionGetDTO dto = new PackagingDimensionGetDTO();
-
- dto.setId(dimension.getId());
- dto.setType(dimension.getType());
- dto.setLength(dimension.getDimensionUnit().convertFromMM(dimension.getLength()).doubleValue());
- dto.setWidth(dimension.getDimensionUnit().convertFromMM(dimension.getWidth()).doubleValue());
- dto.setHeight(dimension.getDimensionUnit().convertFromMM(dimension.getHeight()).doubleValue());
- dto.setDimensionUnit(dimension.getDimensionUnit());
- dto.setWeight(dimension.getWeightUnit().convertFromG(dimension.getWeight()).doubleValue());
- dto.setWeightUnit(dimension.getWeightUnit());
- dto.setContentUnitCount(dimension.getContentUnitCount());
- dto.setDeprecated(dimension.getDeprecated());
-
- return Optional.of(dto);
- }
-
- public Optional convertToPackagingCountryDTO(Optional country) {
-
- if (country.isEmpty()) return Optional.empty();
-
- Country data = country.get();
- PackagingCountryGetDTO dto = new PackagingCountryGetDTO();
-
- dto.setId(data.getId());
- dto.setRegionCode(data.getRegionCode().name());
- dto.setIsoCode(data.getIsoCode().name());
-
- return Optional.of(dto);
- }
-
-
- public Optional convertToPackagingSupplierDTO(Optional node, Optional country) {
-
- if (node.isEmpty() || country.isEmpty()) {
- return Optional.empty();
- }
-
- Node data = node.get();
- PackagingSupplierGetDTO dto = new PackagingSupplierGetDTO();
-
- ArrayList types = new ArrayList<>();
- if (data.getSink()) types.add(NodeTypeDTO.SINK);
- if (data.getSource()) types.add(NodeTypeDTO.SOURCE);
- if (data.getIntermediate()) types.add(NodeTypeDTO.INTERMEDIATE);
-
- dto.setId(data.getId());
- dto.setName(data.getName());
- dto.setAddress(data.getAddress());
- dto.setCountry(convertToPackagingCountryDTO(country).orElseThrow());
- dto.setTypes(types);
- dto.setDeprecated(data.getDeprecated());
-
- return Optional.of(dto);
- }
-
-
- public Optional convertToPackagingMaterialDTO(Optional material) {
- if(material.isEmpty()) return Optional.empty();
-
- Material data = material.get();
- var dto = new PackagingMaterialGetDTO();
-
- dto.setName(data.getName());
- dto.setHsCode(data.getHsCode());
- dto.setPartNumber(data.getPartNumber());
- dto.setId(data.getId());
-
- return Optional.of(dto);
- }
-
- public Optional convertToPackagingGetDTO(Optional packaging, Optional material, Optional supplier, Optional country, Optional hu, Optional shu, List properties) {
- if(packaging.isEmpty()) return Optional.empty();
-
- Packaging data = packaging.get();
- var dto = new PackagingGetDTO();
-
- dto.setId(data.getId());
- dto.setMaterial(convertToPackagingMaterialDTO(material).orElseThrow());
- dto.setSupplier(convertToPackagingSupplierDTO(supplier, country).orElseThrow());
- dto.setHu(convertToPackagingDimensionDTO(hu).orElseThrow());
- dto.setShu(convertToPackagingDimensionDTO(shu).orElseThrow());
- dto.setDeprecated(data.getDeprecated());
- dto.setProperties(properties.stream().map(this::convertToPackagingPropertyGetDTO).toList());
-
- return Optional.of(dto);
- }
-
- private PackagingPropertyGetDTO convertToPackagingPropertyGetDTO(PackagingProperty property) {
- PackagingPropertyGetDTO dto = new PackagingPropertyGetDTO();
-
- dto.setCurrentValue(property.getPropertyValue());
- dto.setDataType(property.getPackagingPropertyType().getDataType().name());
- dto.setRequired(property.getPackagingPropertyType().getRequired());
- dto.setName(property.getPackagingPropertyType().getName());
- dto.setExternalMappingId(property.getPackagingPropertyType().getExternalMappingId());
- dto.setValidationRule(property.getPackagingPropertyType().getValidationRule());
-
- return dto;
- }
-
- public Packaging convertFromPackagingPostDTO(PackagingPostDTO dto) {
-
- var entity = new Packaging();
- entity.setId(dto.getId());
- entity.setDeprecated(dto.getDeprecated());
- entity.setSupplierId(dto.getSupplierId());
- entity.setMaterialId(dto.getMaterialId());
- entity.setHuId(dto.getHu().getId());
- entity.setShuId(dto.getShu().getId());
-
- return entity;
- }
-
- public PackagingDimension convertFromPackagingDimensionGetDTO(PackagingDimensionGetDTO dto) {
-
- var entity = new PackagingDimension();
- entity.setId(dto.getId());
- entity.setType(dto.getType());
- entity.setLength(dto.getDimensionUnit().convertToMM(dto.getLength()).intValue());
- entity.setWidth(dto.getDimensionUnit().convertToMM(dto.getWidth()).intValue());
- entity.setHeight(dto.getDimensionUnit().convertToMM(dto.getHeight()).intValue());
- entity.setDimensionUnit(dto.getDimensionUnit());
- entity.setWeight(dto.getWeightUnit().convertToG(dto.getWeight()).intValue());
- entity.setWeightUnit(dto.getWeightUnit());
- entity.setContentUnitCount(dto.getContentUnitCount());
- entity.setDeprecated(dto.getDeprecated());
-
- return entity;
- }
-
- public PackagingDimension convertFromPackagingDimensionPostDTO(PackagingDimensionPostDTO dto) {
-
- var entity = new PackagingDimension();
- entity.setId(dto.getId());
- entity.setType(dto.getType());
- entity.setLength(dto.getDimensionUnit().convertToMM(dto.getLength()).intValue());
- entity.setWidth(dto.getDimensionUnit().convertToMM(dto.getWidth()).intValue());
- entity.setHeight(dto.getDimensionUnit().convertToMM(dto.getHeight()).intValue());
- entity.setDimensionUnit(dto.getDimensionUnit());
- entity.setWeight(dto.getWeightUnit().convertToG(dto.getWeight()).intValue());
- entity.setWeightUnit(dto.getWeightUnit());
- entity.setContentUnitCount(dto.getContentUnitCount());
- entity.setDeprecated(dto.getDeprecated());
-
- return entity;
- }
-
-
- public List convertFromPackagingPropertyPostDTO(PackagingPropertiesPostDTO properties) {
-
- return properties.stream().map(p -> {
- PackagingProperty entity = new PackagingProperty();
-
- entity.set();
-
- }).toList()
-
- }
-}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/CountryTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/country/CountryTransformerService.java
similarity index 77%
rename from src/main/java/de/avatic/lcc/service/transformer/CountryTransformerService.java
rename to src/main/java/de/avatic/lcc/service/transformer/country/CountryTransformerService.java
index 3e0c9e1..63f39f1 100644
--- a/src/main/java/de/avatic/lcc/service/transformer/CountryTransformerService.java
+++ b/src/main/java/de/avatic/lcc/service/transformer/country/CountryTransformerService.java
@@ -1,8 +1,8 @@
-package de.avatic.lcc.service.transformer;
+package de.avatic.lcc.service.transformer.country;
-import de.avatic.lcc.dto.countries.get.CountryGetDTO;
-import de.avatic.lcc.dto.countries.get.CountryPropertyGetDTO;
+import de.avatic.lcc.dto.configuration.countries.view.CountryViewDTO;
+import de.avatic.lcc.dto.configuration.countries.view.CountryViewPropertyDTO;
import de.avatic.lcc.model.country.Country;
import de.avatic.lcc.model.properties.CountryProperty;
import de.avatic.lcc.model.properties.PropertySetState;
@@ -15,11 +15,11 @@ import java.util.Optional;
public class CountryTransformerService {
- public Optional convertToCountryGetDTO(Optional country, List properties) {
+ public Optional convertToCountryGetDTO(Optional country, List properties) {
if (country.isEmpty()) return Optional.empty();
- CountryGetDTO dto = new CountryGetDTO();
+ CountryViewDTO dto = new CountryViewDTO();
Country entity = country.get();
dto.setIsoCode(entity.getIsoCode().getCode());
@@ -28,7 +28,7 @@ public class CountryTransformerService {
dto.setId(entity.getId());
dto.setProperties(properties.stream().filter(p -> p.getPropertySet().getState().equals(PropertySetState.VALID)).map(p -> {
- CountryPropertyGetDTO dtoEntry = new CountryPropertyGetDTO();
+ CountryViewPropertyDTO dtoEntry = new CountryViewPropertyDTO();
Optional draft = properties.stream().filter(d -> d.getPropertySet().getState().equals(PropertySetState.DRAFT) && d.getType().getExternalMappingId().equals(p.getType().getExternalMappingId())).findFirst();
@@ -47,4 +47,7 @@ public class CountryTransformerService {
}
+
+
+
}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/CountryDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/CountryDTOTransformer.java
new file mode 100644
index 0000000..f21284d
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/CountryDTOTransformer.java
@@ -0,0 +1,22 @@
+package de.avatic.lcc.service.transformer.generic;
+
+import de.avatic.lcc.dto.generic.CountryDTO;
+import de.avatic.lcc.model.country.Country;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CountryDTOTransformer {
+
+ public CountryDTO toCountryDTO(Country entity) {
+
+ CountryDTO dto = new CountryDTO();
+
+ dto.setIsoCode(entity.getIsoCode().getCode());
+ dto.setRegionCode(entity.getRegionCode().getCode());
+ dto.setName(entity.getIsoCode().getFullName());
+ dto.setId(entity.getId());
+
+ return dto;
+
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionDTOTransformer.java
new file mode 100644
index 0000000..daa98f9
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionDTOTransformer.java
@@ -0,0 +1,43 @@
+package de.avatic.lcc.service.transformer.generic;
+
+import de.avatic.lcc.dto.generic.DimensionDTO;
+import de.avatic.lcc.model.packaging.PackagingDimension;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DimensionDTOTransformer {
+
+ public DimensionDTO toDimensionDTO(PackagingDimension entity) {
+ DimensionDTO dto = new DimensionDTO();
+
+ dto.setId(entity.getId());
+ dto.setType(entity.getType());
+ dto.setLength(entity.getDimensionUnit().convertFromMM(entity.getLength()).doubleValue());
+ dto.setWidth(entity.getDimensionUnit().convertFromMM(entity.getWidth()).doubleValue());
+ dto.setHeight(entity.getDimensionUnit().convertFromMM(entity.getHeight()).doubleValue());
+ dto.setDimensionUnit(entity.getDimensionUnit());
+ dto.setWeight(entity.getWeightUnit().convertFromG(entity.getWeight()).doubleValue());
+ dto.setWeightUnit(entity.getWeightUnit());
+ dto.setContentUnitCount(entity.getContentUnitCount());
+ dto.setDeprecated(entity.getDeprecated());
+
+ return dto;
+ }
+
+ public PackagingDimension toDimensionEntity(DimensionDTO dto) {
+ var entity = new PackagingDimension();
+ entity.setId(dto.getId());
+ entity.setType(dto.getType());
+ entity.setLength(dto.getDimensionUnit().convertToMM(dto.getLength()).intValue());
+ entity.setWidth(dto.getDimensionUnit().convertToMM(dto.getWidth()).intValue());
+ entity.setHeight(dto.getDimensionUnit().convertToMM(dto.getHeight()).intValue());
+ entity.setDimensionUnit(dto.getDimensionUnit());
+ entity.setWeight(dto.getWeightUnit().convertToG(dto.getWeight()).intValue());
+ entity.setWeightUnit(dto.getWeightUnit());
+ entity.setContentUnitCount(dto.getContentUnitCount());
+ entity.setDeprecated(dto.getDeprecated());
+
+ return entity;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/LocationDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/LocationDTOTransformer.java
new file mode 100644
index 0000000..af4e0e9
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/LocationDTOTransformer.java
@@ -0,0 +1,12 @@
+package de.avatic.lcc.service.transformer.generic;
+
+import de.avatic.lcc.dto.generic.LocationDTO;
+import de.avatic.lcc.model.nodes.Node;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LocationDTOTransformer {
+ public LocationDTO toLocationDTO(Node entity) {
+ return new LocationDTO(entity.getGeoLat().doubleValue(), entity.getGeoLng().doubleValue());
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/MaterialDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/MaterialDTOTransformer.java
new file mode 100644
index 0000000..8904181
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/MaterialDTOTransformer.java
@@ -0,0 +1,23 @@
+package de.avatic.lcc.service.transformer.generic;
+
+import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.model.materials.Material;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MaterialDTOTransformer {
+
+ public MaterialDTO toMaterialDTO(Material entity) {
+
+ MaterialDTO dtoEntry = new MaterialDTO();
+
+ dtoEntry.setId(entity.getId());
+ dtoEntry.setPartNumber(entity.getPartNumber());
+ dtoEntry.setName(entity.getName());
+ dtoEntry.setHsCode(entity.getHsCode());
+
+ return dtoEntry;
+
+
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/NodeDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/NodeDTOTransformer.java
new file mode 100644
index 0000000..cadd260
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/NodeDTOTransformer.java
@@ -0,0 +1,43 @@
+package de.avatic.lcc.service.transformer.generic;
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.generic.NodeTypeDTO;
+import de.avatic.lcc.model.nodes.Node;
+import de.avatic.lcc.repositories.CountryRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+
+@Service
+public class NodeDTOTransformer {
+
+ private final CountryDTOTransformer countryTransformerService;
+ private final CountryRepository countryRepository;
+ private final LocationDTOTransformer locationDTOTransformer;
+
+ public NodeDTOTransformer(CountryDTOTransformer countryTransformerService, CountryRepository countryRepository, LocationDTOTransformer locationDTOTransformer) {
+ this.countryTransformerService = countryTransformerService;
+ this.countryRepository = countryRepository;
+ this.locationDTOTransformer = locationDTOTransformer;
+ }
+
+ public NodeDTO toNodeDTO(Node entity) {
+ NodeDTO dto = new NodeDTO();
+
+ ArrayList types = new ArrayList<>();
+ if (entity.getSink()) types.add(NodeTypeDTO.SINK);
+ if (entity.getSource()) types.add(NodeTypeDTO.SOURCE);
+ if (entity.getIntermediate()) types.add(NodeTypeDTO.INTERMEDIATE);
+
+ dto.setId(entity.getId());
+ dto.setName(entity.getName());
+ dto.setAddress(entity.getAddress());
+ dto.setCountry(countryTransformerService.toCountryDTO(countryRepository.getById(entity.getCountryId())).orElseThrow());
+ dto.setTypes(types);
+ dto.setDeprecated(entity.getDeprecated());
+ dto.setLocation(locationDTOTransformer.toLocationDTO(entity));
+
+ return dto;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/material/MaterialUpdateDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialUpdateDTOTransformer.java
new file mode 100644
index 0000000..9144124
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialUpdateDTOTransformer.java
@@ -0,0 +1,29 @@
+package de.avatic.lcc.service.transformer.material;
+
+import de.avatic.lcc.dto.configuration.material.update.MaterialUpdateDTO;
+import de.avatic.lcc.model.materials.Material;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MaterialUpdateDTOTransformer {
+
+
+ public Material fromMaterialUpdateDTO(MaterialUpdateDTO dto) {
+ Material entity = new Material();
+
+ entity.setNormalizedPartNumber(normalizePartNumber(dto.getPartNumber()));
+ entity.setPartNumber(dto.getPartNumber());
+ entity.setName(dto.getName());
+ entity.setDeprecated(false);
+ entity.setId(dto.getId());
+ entity.setHsCode(dto.getHsCode());
+
+ return entity;
+ }
+
+ private String normalizePartNumber(String partNumber) {
+ if (partNumber.length() > 12) throw new IllegalArgumentException("Part number must be less than 12 characters");
+ return "000000000000".concat(partNumber).substring(partNumber.length());
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewDTOTransformer.java
new file mode 100644
index 0000000..865ee78
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewDTOTransformer.java
@@ -0,0 +1,27 @@
+package de.avatic.lcc.service.transformer.material;
+
+import de.avatic.lcc.dto.configuration.material.view.MaterialViewDTO;
+import de.avatic.lcc.dto.configuration.material.view.MaterialViewPackagingDTO;
+import de.avatic.lcc.model.materials.Material;
+import de.avatic.lcc.repositories.packaging.PackagingRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class MaterialViewDTOTransformer {
+
+ private final PackagingRepository packagingRepository;
+ private final MaterialViewPackagingDTOTransformer materialViewPackagingDTOTransformer;
+
+ public MaterialViewDTOTransformer(PackagingRepository packagingRepository, MaterialViewPackagingDTOTransformer materialViewPackagingDTOTransformer) {
+ this.packagingRepository = packagingRepository;
+ this.materialViewPackagingDTOTransformer = materialViewPackagingDTOTransformer;
+ }
+
+ public MaterialViewDTO toMaterialViewDTO(Material material) {
+ List packaging = packagingRepository.getByMaterialId(material.getId()).stream().map(materialViewPackagingDTOTransformer::toMaterialViewPackagingDTO).toList();
+
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewPackagingDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewPackagingDTOTransformer.java
new file mode 100644
index 0000000..9b0e7b5
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/material/MaterialViewPackagingDTOTransformer.java
@@ -0,0 +1,45 @@
+package de.avatic.lcc.service.transformer.material;
+
+import de.avatic.lcc.dto.configuration.material.view.MaterialViewPackagingDTO;
+import de.avatic.lcc.model.nodes.Node;
+import de.avatic.lcc.model.packaging.Packaging;
+import de.avatic.lcc.model.packaging.PackagingDimension;
+import de.avatic.lcc.repositories.NodeRepository;
+import de.avatic.lcc.repositories.packaging.PackagingDimensionRepository;
+import de.avatic.lcc.service.transformer.generic.DimensionDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+public class MaterialViewPackagingDTOTransformer {
+
+ private final NodeRepository nodeRepository;
+ private final PackagingDimensionRepository packagingDimensionRepository;
+ private final DimensionDTOTransformer dimensionDTOTransformer;
+ private final NodeDTOTransformer nodeDTOTransformer;
+
+ public MaterialViewPackagingDTOTransformer(NodeRepository nodeRepository, PackagingDimensionRepository packagingDimensionRepository, DimensionDTOTransformer dimensionDTOTransformer, NodeDTOTransformer nodeDTOTransformer) {
+ this.nodeRepository = nodeRepository;
+ this.packagingDimensionRepository = packagingDimensionRepository;
+ this.dimensionDTOTransformer = dimensionDTOTransformer;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ }
+
+ public MaterialViewPackagingDTO toMaterialViewPackagingDTO(Packaging entity) {
+ Optional supplier = nodeRepository.getById(entity.getSupplierId());
+ Optional hu = packagingDimensionRepository.getById(entity.getHuId());
+ Optional shu = packagingDimensionRepository.getById(entity.getShuId());
+
+ MaterialViewPackagingDTO dto = new MaterialViewPackagingDTO();
+ dto.setId(entity.getId());
+ dto.setDeprecated(entity.getDeprecated());
+ dto.setHu(dimensionDTOTransformer.toDimensionDTO(hu.orElseThrow()));
+ dto.setShu(dimensionDTOTransformer.toDimensionDTO(shu.orElseThrow()));
+ dto.setSupplier(nodeDTOTransformer.toNodeDTO(supplier.orElseThrow()));
+
+ return dto;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeUpdateDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeUpdateDTOTransformer.java
new file mode 100644
index 0000000..fe50726
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeUpdateDTOTransformer.java
@@ -0,0 +1,21 @@
+package de.avatic.lcc.service.transformer.nodes;
+
+import de.avatic.lcc.dto.configuration.nodes.update.NodeUpdateDTO;
+import de.avatic.lcc.model.nodes.Node;
+import org.springframework.stereotype.Service;
+
+@Service
+public class NodeUpdateDTOTransformer {
+
+
+ public Node fromNodeUpdateDTO(NodeUpdateDTO dto) {
+
+ Node entity = new Node();
+
+ entity.setId(dto.getId());
+ entity.setSink(dto.get);
+
+ return entity;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeViewDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeViewDTOTransformer.java
new file mode 100644
index 0000000..bd8f861
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/nodes/NodeViewDTOTransformer.java
@@ -0,0 +1,64 @@
+package de.avatic.lcc.service.transformer.nodes;
+
+import de.avatic.lcc.dto.generic.NodeDTO;
+import de.avatic.lcc.dto.generic.NodeTypeDTO;
+import de.avatic.lcc.dto.configuration.nodes.view.NodeViewDTO;
+import de.avatic.lcc.model.nodes.Node;
+import de.avatic.lcc.repositories.CountryRepository;
+import de.avatic.lcc.repositories.NodeRepository;
+import de.avatic.lcc.service.transformer.generic.CountryDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.LocationDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class NodeViewDTOTransformer {
+
+ private final CountryDTOTransformer countryDTOTransformer;
+ private final CountryRepository countryRepository;
+ private final LocationDTOTransformer locationDTOTransformer;
+ private final NodeDTOTransformer nodeDTOTransformer;
+ private final NodeRepository nodeRepository;
+
+ public NodeViewDTOTransformer(CountryDTOTransformer countryDTOTransformer, CountryRepository countryRepository, LocationDTOTransformer locationDTOTransformer, NodeDTOTransformer nodeDTOTransformer, NodeRepository nodeRepository) {
+ this.countryDTOTransformer = countryDTOTransformer;
+ this.countryRepository = countryRepository;
+ this.locationDTOTransformer = locationDTOTransformer;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ this.nodeRepository = nodeRepository;
+ }
+
+ public NodeViewDTO toNodeViewDTO(Node node) {
+ NodeViewDTO dto = new NodeViewDTO();
+
+ Map predecessors = new HashMap<>();
+
+ for (Integer seq : node.getNodePredecessors().keySet())
+ predecessors.put(seq, nodeDTOTransformer.toNodeDTO(nodeRepository.getById(node.getNodePredecessors().get(seq)).orElseThrow()));
+
+ dto.setId(node.getId());
+ dto.setDeprecated(node.getDeprecated());
+ dto.setCountry(countryDTOTransformer.toCountryDTO(countryRepository.getById(node.getCountryId()).orElseThrow()));
+ dto.setName(node.getName());
+ dto.setAddress(node.getAddress());
+ dto.setLocation(locationDTOTransformer.toLocationDTO(node));
+ dto.setTypes(toNodeTypeArrayList(node));
+ dto.setPredecessors(predecessors);
+ dto.setOutboundCountries(node.getOutboundCountries().stream().map(id -> countryDTOTransformer.toCountryDTO(countryRepository.getById(id).orElseThrow())).toList());
+
+ return dto;
+ }
+
+ private ArrayList toNodeTypeArrayList(Node entity) {
+ ArrayList types = new ArrayList<>();
+ if (entity.getSink()) types.add(NodeTypeDTO.SINK);
+ if (entity.getSource()) types.add(NodeTypeDTO.SOURCE);
+ if (entity.getIntermediate()) types.add(NodeTypeDTO.INTERMEDIATE);
+ return types;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingTransformerService.java b/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingTransformerService.java
new file mode 100644
index 0000000..2b8b6b5
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingTransformerService.java
@@ -0,0 +1,69 @@
+package de.avatic.lcc.service.transformer.packaging;
+
+import de.avatic.lcc.dto.configuration.packaging.view.PackagingViewDTO;
+import de.avatic.lcc.dto.configuration.packaging.update.PackagingUpdateDTO;
+import de.avatic.lcc.model.country.Country;
+import de.avatic.lcc.model.materials.Material;
+import de.avatic.lcc.model.nodes.Node;
+import de.avatic.lcc.model.packaging.Packaging;
+import de.avatic.lcc.model.packaging.PackagingDimension;
+import de.avatic.lcc.model.packaging.PackagingProperty;
+import de.avatic.lcc.service.transformer.generic.DimensionDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.MaterialDTOTransformer;
+import de.avatic.lcc.service.transformer.generic.NodeDTOTransformer;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class PackagingTransformerService {
+
+ //TODO refactor to new format
+
+ private final MaterialDTOTransformer materialDTOTransformer;
+ private final DimensionDTOTransformer dimensionDTOTransformer;
+ private final NodeDTOTransformer nodeDTOTransformer;
+ private final PackagingViewPropertyDTOTransformer packagingViewPropertyDTOTransformer;
+
+ public PackagingTransformerService(MaterialDTOTransformer materialDTOTransformer, DimensionDTOTransformer dimensionDTOTransformer, NodeDTOTransformer nodeDTOTransformer, PackagingViewPropertyDTOTransformer packagingViewPropertyDTOTransformer) {
+ this.materialDTOTransformer = materialDTOTransformer;
+ this.dimensionDTOTransformer = dimensionDTOTransformer;
+ this.nodeDTOTransformer = nodeDTOTransformer;
+ this.packagingViewPropertyDTOTransformer = packagingViewPropertyDTOTransformer;
+ }
+
+
+ public Optional convertToPackagingGetDTO(Optional packaging, Optional material, Optional supplier, Optional country, Optional hu, Optional shu, List properties) {
+ if(packaging.isEmpty()) return Optional.empty();
+
+ Packaging data = packaging.get();
+ var dto = new PackagingViewDTO();
+
+ dto.setId(data.getId());
+ dto.setMaterial(materialDTOTransformer.toMaterialDTO(material.orElseThrow()));
+ dto.setSupplier(nodeDTOTransformer.toNodeDTO(supplier.orElseThrow()));
+ dto.setHu(dimensionDTOTransformer.toDimensionDTO(hu.orElseThrow()));
+ dto.setShu(dimensionDTOTransformer.toDimensionDTO(shu.orElseThrow()));
+ dto.setDeprecated(data.getDeprecated());
+ dto.setProperties(properties.stream().map(packagingViewPropertyDTOTransformer::toPackagingViewPropertyDTO).toList());
+
+ return Optional.of(dto);
+ }
+
+
+
+ public Packaging convertFromPackagingPostDTO(PackagingUpdateDTO dto) {
+
+ var entity = new Packaging();
+ entity.setId(dto.getId());
+ entity.setDeprecated(dto.getDeprecated());
+ entity.setSupplierId(dto.getSupplierId());
+ entity.setMaterialId(dto.getMaterialId());
+ entity.setHuId(dto.getHu().getId());
+ entity.setShuId(dto.getShu().getId());
+
+ return entity;
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingViewPropertyDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingViewPropertyDTOTransformer.java
new file mode 100644
index 0000000..18688f3
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/packaging/PackagingViewPropertyDTOTransformer.java
@@ -0,0 +1,22 @@
+package de.avatic.lcc.service.transformer.packaging;
+
+import de.avatic.lcc.dto.configuration.packaging.view.PackagingViewPropertyDTO;
+import de.avatic.lcc.model.packaging.PackagingProperty;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PackagingViewPropertyDTOTransformer {
+
+ public PackagingViewPropertyDTO toPackagingViewPropertyDTO(PackagingProperty property) {
+ PackagingViewPropertyDTO dto = new PackagingViewPropertyDTO();
+
+ dto.setCurrentValue(property.getPropertyValue());
+ dto.setDataType(property.getPackagingPropertyType().getDataType().name());
+ dto.setRequired(property.getPackagingPropertyType().getRequired());
+ dto.setName(property.getPackagingPropertyType().getName());
+ dto.setExternalMappingId(property.getPackagingPropertyType().getExternalMappingId());
+ dto.setValidationRule(property.getPackagingPropertyType().getValidationRule());
+
+ return dto;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/users/UserDTOTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/users/UserDTOTransformer.java
new file mode 100644
index 0000000..1015f92
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/transformer/users/UserDTOTransformer.java
@@ -0,0 +1,18 @@
+package de.avatic.lcc.service.transformer.users;
+
+import de.avatic.lcc.dto.users.UserDTO;
+import de.avatic.lcc.model.users.User;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserDTOTransformer {
+
+ public UserDTO toUserDTO(User entity) {
+ UserDTO dto = new UserDTO();
+
+ // todo implement
+
+ return dto;
+
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/users/GroupService.java b/src/main/java/de/avatic/lcc/service/users/GroupService.java
new file mode 100644
index 0000000..5ecfe1f
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/users/GroupService.java
@@ -0,0 +1,28 @@
+package de.avatic.lcc.service.users;
+
+import de.avatic.lcc.dto.users.GroupDTO;
+import de.avatic.lcc.dto.users.UserDTO;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.repositories.users.GroupRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class GroupService {
+ private final GroupRepository groupRepository;
+
+ public GroupService(GroupRepository groupRepository) {
+ this.groupRepository = groupRepository;
+ }
+
+
+
+ public void updateGroup(GroupDTO group) {
+
+ }
+
+ public SearchQueryResult listGroups(int page, int limit) {
+ groupRepository.listGroups()
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/service/users/UserService.java b/src/main/java/de/avatic/lcc/service/users/UserService.java
new file mode 100644
index 0000000..8f225ee
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/service/users/UserService.java
@@ -0,0 +1,37 @@
+package de.avatic.lcc.service.users;
+
+import de.avatic.lcc.dto.users.UserDTO;
+import de.avatic.lcc.model.users.User;
+import de.avatic.lcc.repositories.pagination.SearchQueryPagination;
+import de.avatic.lcc.repositories.pagination.SearchQueryResult;
+import de.avatic.lcc.repositories.users.UserRepository;
+import de.avatic.lcc.service.transformer.users.UserDTOTransformer;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class UserService {
+
+ private final UserRepository userRepository;
+ private final UserDTOTransformer userDTOTransformer;
+
+ public UserService(UserRepository userRepository, UserDTOTransformer userDTOTransformer) {
+ this.userRepository = userRepository;
+ this.userDTOTransformer = userDTOTransformer;
+ }
+
+ public SearchQueryResult listUsers(int page, int limit) {
+ return SearchQueryResult.map(userRepository.listUsers(new SearchQueryPagination(page, limit)), userDTOTransformer::toUserDTO);
+ }
+
+ public void updateUser(UserDTO user) {
+
+ groupRepository.update
+ userRepository.update(fromUserDTO(user));
+ }
+
+ private User fromUserDTO(UserDTO dto) {
+ return new User();
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/util/Check.java b/src/main/java/de/avatic/lcc/util/Check.java
index a9a0706..29766d3 100644
--- a/src/main/java/de/avatic/lcc/util/Check.java
+++ b/src/main/java/de/avatic/lcc/util/Check.java
@@ -1,5 +1,7 @@
package de.avatic.lcc.util;
+import de.avatic.lcc.util.exception.clienterror.InvalidArgumentException;
+
public class Check {
diff --git a/src/main/java/de/avatic/lcc/util/NotFoundException.java b/src/main/java/de/avatic/lcc/util/NotFoundException.java
new file mode 100644
index 0000000..21bd7f2
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/util/NotFoundException.java
@@ -0,0 +1,18 @@
+package de.avatic.lcc.util;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+
+@ResponseStatus(HttpStatus.NOT_FOUND)
+public class NotFoundException extends RuntimeException {
+
+ public NotFoundException() {
+ super();
+ }
+
+ public NotFoundException(final String message) {
+ super(message);
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/util/ReferencedException.java b/src/main/java/de/avatic/lcc/util/ReferencedException.java
new file mode 100644
index 0000000..e1d9ec0
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/util/ReferencedException.java
@@ -0,0 +1,18 @@
+package de.avatic.lcc.util;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+
+@ResponseStatus(HttpStatus.CONFLICT)
+public class ReferencedException extends RuntimeException {
+
+ public ReferencedException() {
+ super();
+ }
+
+ public ReferencedException(final ReferencedWarning referencedWarning) {
+ super(referencedWarning.toMessage());
+ }
+
+}
diff --git a/src/main/java/de/avatic/lcc/util/ReferencedWarning.java b/src/main/java/de/avatic/lcc/util/ReferencedWarning.java
new file mode 100644
index 0000000..1464404
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/util/ReferencedWarning.java
@@ -0,0 +1,42 @@
+package de.avatic.lcc.util;
+
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+
+
+public class ReferencedWarning {
+
+ private String key = null;
+ private ArrayList