lcc_tool/src/main/java/de/avatic/lcc/service/MaterialService.java
Jan c5096b129b Remove outdated DTOs and refactor material-related services
Removed legacy DTOs (`PackagingDTO`, `PackagingListEntry`, etc.) that were no longer in use. Introduced modular, type-specific DTOs (`MaterialGetDTO`, `MaterialPostDTO`, etc.) and improved service layer responsibilities with a new `MaterialTransformerService`. This enhances maintainability and prepares for future feature extensions.
2025-03-28 21:35:55 +01:00

80 lines
4.1 KiB
Java

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<MaterialListGetDTO> listMaterial(String filter, int page, int limit) {
SearchQueryResult<Material> queryResult = materialRepository.listMaterials(filter, true, new SearchQueryPagination(page, limit));
List<MaterialListGetDTO> dto = queryResult.toList().stream().map(materialTransformerService::convertToMaterialListGetDTO).toList();
return new SearchQueryResult<>(dto, queryResult.getPage(), queryResult.getTotalElements(), queryResult.getElementsPerPage());
}
public MaterialGetDTO getMaterial(Integer id) {
List<MaterialPackagingGetDTO> packaging = packagingRepository.getByMaterialId(id).stream().map(p -> {
Optional<Node> supplier = nodeRepository.getById(p.getSupplierId());
Optional<Country> country = countryRepository.getById(supplier.orElseThrow().getCountryId());
Optional<PackagingDimension> hu = packagingDimensionRepository.getById(p.getHuId());
Optional<PackagingDimension> 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));
}
}