diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/DeliveryRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/DeliveryRepository.java index cea7881b..a8ef5af7 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/DeliveryRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/DeliveryRepository.java @@ -20,11 +20,37 @@ package org.eclipse.tractusx.puris.backend.delivery.domain.repository; -import java.util.UUID; - import org.eclipse.tractusx.puris.backend.delivery.domain.model.Delivery; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.UUID; + public interface DeliveryRepository extends JpaRepository { - + + default List getForOwnMaterialNumber(String ownMatNbr) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/OwnDeliveryRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/OwnDeliveryRepository.java index f1111d00..e1fb67a2 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/OwnDeliveryRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/OwnDeliveryRepository.java @@ -22,6 +22,45 @@ import org.eclipse.tractusx.puris.backend.delivery.domain.model.OwnDelivery; +import java.util.ArrayList; +import java.util.List; + public interface OwnDeliveryRepository extends DeliveryRepository { + + List findAllByMaterial_OwnMaterialNumber(String ownMaterialNumber); + + @Override + default List getForOwnMaterialNumber(String ownMatNbr) { + return findAllByMaterial_OwnMaterialNumber(ownMatNbr); + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(String ownMatNbr, String partnerBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + return findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(ownMatNbr, bpnl); + } + + List findAllByMaterial_OwnMaterialNumberAndOriginBpns(String ownMatNbr, String originBpns); + + List findAllByMaterial_OwnMaterialNumberAndDestinationBpns(String ownMatNbr, String destinationBpns); + + @Override + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + var resultList = new ArrayList<>(findAllByMaterial_OwnMaterialNumberAndOriginBpns(ownMatNbr, bpns)); + resultList.addAll(findAllByMaterial_OwnMaterialNumberAndDestinationBpns(ownMatNbr, bpns)); + return resultList; + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndDestinationBpns(String ownMatNbr, String partnerBpnl, String destinationBpnl); + + List findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndOriginBpns(String ownMatNbr, String partnerBpnl, String originBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + var resultList = new ArrayList<>(findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndDestinationBpns(ownMatNbr, bpnl, bpns)); + resultList.addAll(findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndOriginBpns(ownMatNbr, bpnl, bpns)); + return resultList; + } } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/ReportedDeliveryRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/ReportedDeliveryRepository.java index dfeaec5c..91332ee3 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/ReportedDeliveryRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/domain/repository/ReportedDeliveryRepository.java @@ -22,6 +22,45 @@ import org.eclipse.tractusx.puris.backend.delivery.domain.model.ReportedDelivery; +import java.util.ArrayList; +import java.util.List; + public interface ReportedDeliveryRepository extends DeliveryRepository { + List findAllByMaterial_OwnMaterialNumber(String ownMaterialNumber); + + @Override + default List getForOwnMaterialNumber(String ownMatNbr) { + return findAllByMaterial_OwnMaterialNumber(ownMatNbr); + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(String ownMatNbr, String partnerBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + return findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(ownMatNbr, bpnl); + } + + List findAllByMaterial_OwnMaterialNumberAndOriginBpns(String ownMatNbr, String originBpns); + + List findAllByMaterial_OwnMaterialNumberAndDestinationBpns(String ownMatNbr, String destinationBpns); + + @Override + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + var resultList = new ArrayList<>(findAllByMaterial_OwnMaterialNumberAndOriginBpns(ownMatNbr, bpns)); + resultList.addAll(findAllByMaterial_OwnMaterialNumberAndDestinationBpns(ownMatNbr, bpns)); + return resultList; + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndDestinationBpns(String ownMatNbr, String partnerBpnl, String destinationBpnl); + + List findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndOriginBpns(String ownMatNbr, String partnerBpnl, String originBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + var resultList = new ArrayList<>(findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndDestinationBpns(ownMatNbr, bpnl, bpns)); + resultList.addAll(findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndOriginBpns(ownMatNbr, bpnl, bpns)); + return resultList; + } + } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryService.java index a0904183..fec2d5f5 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/DeliveryService.java @@ -20,25 +20,26 @@ package org.eclipse.tractusx.puris.backend.delivery.logic.service; +import org.eclipse.tractusx.puris.backend.delivery.domain.model.Delivery; +import org.eclipse.tractusx.puris.backend.delivery.domain.repository.DeliveryRepository; +import org.eclipse.tractusx.puris.backend.stock.logic.dto.itemstocksamm.DirectionCharacteristic; + import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.stream.Stream; -import org.eclipse.tractusx.puris.backend.delivery.domain.model.Delivery; -import org.eclipse.tractusx.puris.backend.delivery.domain.repository.DeliveryRepository; -import org.eclipse.tractusx.puris.backend.stock.logic.dto.itemstocksamm.DirectionCharacteristic; -import org.springframework.beans.factory.annotation.Autowired; - public abstract class DeliveryService { - @Autowired - protected DeliveryRepository repository; + + final protected DeliveryRepository repository; + + protected DeliveryService(DeliveryRepository repository) { + this.repository = repository; + } + + public abstract boolean validate(T delivery); public final List findAll() { return repository.findAll(); @@ -54,17 +55,8 @@ public final List findAllByFilters( Optional bpnl, Optional day, Optional direction) { - Stream stream = repository.findAll().stream(); - if (ownMaterialNumber.isPresent()) { - stream = stream.filter(delivery -> delivery.getMaterial().getOwnMaterialNumber().equals(ownMaterialNumber.get())); - } - if (bpns.isPresent()) { - stream = stream.filter(delivery -> delivery.getDestinationBpns().equals(bpns.get()) || delivery.getOriginBpns().equals(bpns.get())); - } - if (bpnl.isPresent()) { - stream = stream.filter(delivery -> delivery.getPartner().getBpnl().equals(bpnl.get())); - } - if (day.isPresent()) { + if (day.isPresent() && direction.isPresent() && ownMaterialNumber.isPresent() && bpns.isPresent() && bpnl.isPresent()) { + Stream stream = repository.getForOwnMaterialNumberAndPartnerBPNLAndBPNS(ownMaterialNumber.get(), bpnl.get(), bpns.get()).stream(); LocalDate localDayDate = Instant.ofEpochMilli(day.get().getTime()) .atOffset(ZoneOffset.UTC) .toLocalDate(); @@ -77,15 +69,27 @@ public final List findAllByFilters( .toLocalDate(); return deliveryDayDate.getDayOfMonth() == localDayDate.getDayOfMonth(); }); - } - if (direction.isPresent()) { if (direction.get() == DirectionCharacteristic.INBOUND) { stream = stream.filter(delivery -> delivery.getDestinationBpns().equals(bpns.get())); } else { stream = stream.filter(delivery -> delivery.getOriginBpns().equals(bpns.get())); } + return stream.toList(); + } + if (ownMaterialNumber.isPresent() && bpns.isPresent() && bpnl.isPresent()) { + return repository.getForOwnMaterialNumberAndPartnerBPNLAndBPNS(ownMaterialNumber.get(), bpnl.get(), bpns.get()); + } + if (ownMaterialNumber.isPresent() && bpns.isPresent()) { + return repository.getForOwnMaterialNumberAndBPNS(ownMaterialNumber.get(), bpns.get()); } - return stream.toList(); + if (ownMaterialNumber.isPresent() && bpnl.isPresent()) { + return repository.getForOwnMaterialNumberAndPartnerBPNL(ownMaterialNumber.get(), bpnl.get()); + } + if (ownMaterialNumber.isPresent()) { + return repository.getForOwnMaterialNumber(ownMaterialNumber.get()); + } + + return List.of(); } public final double getSumOfQuantities(List deliveries) { @@ -114,7 +118,11 @@ public final T update(T delivery) { if (delivery.getUuid() == null || repository.findById(delivery.getUuid()).isEmpty()) { return null; } - return repository.save(delivery); + if (validate(delivery)) { + return repository.save(delivery); + } else { + return null; + } } public final void delete(UUID id) { diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/OwnDeliveryService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/OwnDeliveryService.java index a2e97e6f..4889f0ca 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/OwnDeliveryService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/OwnDeliveryService.java @@ -20,12 +20,6 @@ package org.eclipse.tractusx.puris.backend.delivery.logic.service; -import java.util.Date; -import java.util.List; -import java.util.function.Function; - -import javax.management.openmbean.KeyAlreadyExistsException; - import org.eclipse.tractusx.puris.backend.delivery.domain.model.EventTypeEnumeration; import org.eclipse.tractusx.puris.backend.delivery.domain.model.OwnDelivery; import org.eclipse.tractusx.puris.backend.delivery.domain.repository.OwnDeliveryRepository; @@ -33,6 +27,10 @@ import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; import org.springframework.stereotype.Service; +import javax.management.openmbean.KeyAlreadyExistsException; +import java.util.Date; +import java.util.function.Function; + @Service public class OwnDeliveryService extends DeliveryService { private final OwnDeliveryRepository repository; @@ -44,21 +42,12 @@ public class OwnDeliveryService extends DeliveryService { private Partner ownPartnerEntity; public OwnDeliveryService(OwnDeliveryRepository repository, PartnerService partnerService) { + super(repository); this.repository = repository; this.partnerService = partnerService; this.validator = this::validate; } - public final List findAllByBpnl(String bpnl) { - return repository.findAll().stream().filter(delivery -> delivery.getPartner().getBpnl().equals(bpnl)) - .toList(); - } - - public final List findAllByOwnMaterialNumber(String ownMaterialNumber) { - return repository.findAll().stream().filter(delivery -> delivery.getMaterial().getOwnMaterialNumber().equals(ownMaterialNumber)) - .toList(); - } - public final OwnDelivery create(OwnDelivery delivery) { if (!validator.apply(delivery)) { throw new IllegalArgumentException("Invalid delivery"); @@ -69,17 +58,7 @@ public final OwnDelivery create(OwnDelivery delivery) { return repository.save(delivery); } - public final List createAll(List deliveries) { - if (deliveries.stream().anyMatch(delivery -> !validator.apply(delivery))) { - throw new IllegalArgumentException("Invalid delivery"); - } - if (repository.findAll().stream() - .anyMatch(existing -> deliveries.stream().anyMatch(delivery -> delivery.equals(existing)))) { - throw new KeyAlreadyExistsException("delivery already exists"); - } - return repository.saveAll(deliveries); - } - + @Override public boolean validate(OwnDelivery delivery) { if (ownPartnerEntity == null) { ownPartnerEntity = partnerService.getOwnPartnerEntity(); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/ReportedDeliveryService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/ReportedDeliveryService.java index f0f4f6d3..bd03036d 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/ReportedDeliveryService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/delivery/logic/service/ReportedDeliveryService.java @@ -20,11 +20,6 @@ package org.eclipse.tractusx.puris.backend.delivery.logic.service; -import java.util.Date; -import java.util.List; -import java.util.UUID; -import java.util.function.Function; - import org.eclipse.tractusx.puris.backend.delivery.domain.model.EventTypeEnumeration; import org.eclipse.tractusx.puris.backend.delivery.domain.model.ReportedDelivery; import org.eclipse.tractusx.puris.backend.delivery.domain.repository.ReportedDeliveryRepository; @@ -32,6 +27,9 @@ import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.function.Function; + @Service public class ReportedDeliveryService extends DeliveryService { private final ReportedDeliveryRepository repository; @@ -43,16 +41,12 @@ public class ReportedDeliveryService extends DeliveryService { private Partner ownPartnerEntity; public ReportedDeliveryService(ReportedDeliveryRepository repository, PartnerService partnerService) { + super(repository); this.repository = repository; this.partnerService = partnerService; this.validator = this::validate; } - public final List findAllByReportedId(UUID reportedId) { - return repository.findAll().stream().filter(delivery -> delivery.getPartner().getUuid().equals(reportedId)) - .toList(); - } - public final ReportedDelivery create(ReportedDelivery delivery) { if (delivery.getUuid() != null && repository.findById(delivery.getUuid()).isPresent()) { return null; @@ -63,17 +57,7 @@ public final ReportedDelivery create(ReportedDelivery delivery) { return repository.save(delivery); } - public final List createAll(List deliveries) { - if (deliveries.stream().anyMatch(delivery -> !validator.apply(delivery))) { - return null; - } - if (repository.findAll().stream() - .anyMatch(existing -> deliveries.stream().anyMatch(delivery -> delivery.equals(existing)))) { - return null; - } - return repository.saveAll(deliveries); - } - + @Override public boolean validate(ReportedDelivery delivery) { return delivery.getQuantity() > 0 && diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/OwnProductionRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/OwnProductionRepository.java index c8b03cbb..e53c0726 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/OwnProductionRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/OwnProductionRepository.java @@ -23,7 +23,37 @@ See the NOTICE file(s) distributed with this work for additional import org.eclipse.tractusx.puris.backend.production.domain.model.OwnProduction; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface OwnProductionRepository extends ProductionRepository { + List findAllByMaterial_OwnMaterialNumber(String ownMaterialNumber); + + @Override + default List getForOwnMaterialNumber(String ownMatNbr) { + return findAllByMaterial_OwnMaterialNumber(ownMatNbr); + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(String ownMaterialNumber, String partnerBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + return findAllByMaterial_OwnMaterialNumberAndPartner_Bpnl(ownMatNbr, bpnl); + } + + List findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndProductionSiteBpns(String ownMaterialNumber, String partnerBpnl, String bpns); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + return findAllByMaterial_OwnMaterialNumberAndPartner_BpnlAndProductionSiteBpns(ownMatNbr, bpnl, bpns); + } + + List findAllByMaterial_OwnMaterialNumberAndProductionSiteBpns(String ownMatNbr, String bpns); + + @Override + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + return findAllByMaterial_OwnMaterialNumberAndProductionSiteBpns(ownMatNbr, bpns); + } + } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ProductionRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ProductionRepository.java index fd44fd6f..c4921762 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ProductionRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ProductionRepository.java @@ -23,8 +23,32 @@ import org.eclipse.tractusx.puris.backend.production.domain.model.Production; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.UUID; public interface ProductionRepository extends JpaRepository { - + + default List getForOwnMaterialNumber(String ownMatNbr) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } + + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + // default implementation prevents Jpa from trying to + // auto-generate this method. + throw new UnsupportedOperationException("Implementation needed"); + } } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ReportedProductionRepository.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ReportedProductionRepository.java index 542a242f..0e3ced8d 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ReportedProductionRepository.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/domain/repository/ReportedProductionRepository.java @@ -23,7 +23,38 @@ See the NOTICE file(s) distributed with this work for additional import org.eclipse.tractusx.puris.backend.production.domain.model.ReportedProduction; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface ReportedProductionRepository extends ProductionRepository { + + List findAllByMaterial_OwnMaterialNumber(String ownMaterialNumber); + + @Override + default List getForOwnMaterialNumber(String ownMatNbr) { + return findAllByMaterial_OwnMaterialNumber(ownMatNbr); + } + + List findByMaterial_OwnMaterialNumberAndPartner_Bpnl(String ownMaterialNumber, String partnerBpnl); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNL(String ownMatNbr, String bpnl) { + return findByMaterial_OwnMaterialNumberAndPartner_Bpnl(ownMatNbr, bpnl); + } + + List findByMaterial_OwnMaterialNumberAndPartner_BpnlAndProductionSiteBpns(String ownMaterialNumber, String partnerBpnl, String bpns); + + @Override + default List getForOwnMaterialNumberAndPartnerBPNLAndBPNS(String ownMatNbr, String bpnl, String bpns) { + return findByMaterial_OwnMaterialNumberAndPartner_BpnlAndProductionSiteBpns(ownMatNbr, bpnl, bpns); + } + + List findByMaterial_OwnMaterialNumberAndProductionSiteBpns(String ownMatNbr, String bpns); + + @Override + default List getForOwnMaterialNumberAndBPNS(String ownMatNbr, String bpns) { + return findByMaterial_OwnMaterialNumberAndProductionSiteBpns(ownMatNbr, bpns); + } + } diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/OwnProductionService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/OwnProductionService.java index 255f750a..9d4072ab 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/OwnProductionService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/OwnProductionService.java @@ -20,17 +20,16 @@ See the NOTICE file(s) distributed with this work for additional package org.eclipse.tractusx.puris.backend.production.logic.service; -import java.util.List; -import java.util.function.Function; - -import javax.management.openmbean.KeyAlreadyExistsException; - import org.eclipse.tractusx.puris.backend.masterdata.domain.model.Partner; import org.eclipse.tractusx.puris.backend.masterdata.logic.service.PartnerService; import org.eclipse.tractusx.puris.backend.production.domain.model.OwnProduction; import org.eclipse.tractusx.puris.backend.production.domain.repository.OwnProductionRepository; import org.springframework.stereotype.Service; +import javax.management.openmbean.KeyAlreadyExistsException; +import java.util.List; +import java.util.function.Function; + @Service public class OwnProductionService extends ProductionService { private final OwnProductionRepository repository; @@ -40,6 +39,7 @@ public class OwnProductionService extends ProductionService { protected final Function validator; public OwnProductionService(OwnProductionRepository repository, PartnerService partnerService) { + super(repository); this.repository = repository; this.partnerService = partnerService; this.validator = this::validate; @@ -67,6 +67,7 @@ public final List createAll(List productions) { return repository.saveAll(productions); } + @Override public boolean validate(OwnProduction production) { Partner ownPartnerEntity = partnerService.getOwnPartnerEntity(); return diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionService.java index d8bd42c2..141c2569 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ProductionService.java @@ -21,18 +21,20 @@ import org.eclipse.tractusx.puris.backend.production.domain.model.Production; import org.eclipse.tractusx.puris.backend.production.domain.repository.ProductionRepository; -import org.springframework.beans.factory.annotation.Autowired; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.time.ZoneOffset; import java.util.*; -import java.util.stream.Stream; public abstract class ProductionService { - @Autowired - protected ProductionRepository repository; + + protected final ProductionRepository repository; + + protected ProductionService(ProductionRepository repository) { + this.repository = repository; + } public final List findAll() { return repository.findAll(); @@ -57,28 +59,36 @@ public final List findAllByFilters( Optional bpnl, Optional bpns, Optional dayOfCompletion) { - Stream stream = repository.findAll().stream(); - if (ownMaterialNumber.isPresent()) { - stream = stream.filter(production -> production.getMaterial().getOwnMaterialNumber().equals(ownMaterialNumber.get())); - } - if (bpnl.isPresent()) { - stream = stream.filter(production -> production.getPartner().getBpnl().equals(bpnl.get())); - } - if (bpns.isPresent()) { - stream = stream.filter(production -> production.getProductionSiteBpns().equals(bpns.get())); - } - if (dayOfCompletion.isPresent()) { + if (ownMaterialNumber.isPresent() && bpnl.isPresent() && bpns.isPresent() && dayOfCompletion.isPresent()) { + var resultList = repository.getForOwnMaterialNumberAndPartnerBPNLAndBPNS(ownMaterialNumber.get(), bpnl.get(), bpns.get()); LocalDate localEstimatedTimeOfCompletion = Instant.ofEpochMilli(dayOfCompletion.get().getTime()) .atOffset(ZoneOffset.UTC) .toLocalDate(); - stream = stream.filter(production -> { - LocalDate productionEstimatedTimeOfCompletion = Instant.ofEpochMilli(production.getEstimatedTimeOfCompletion().getTime()) - .atOffset(ZoneOffset.UTC) - .toLocalDate(); - return productionEstimatedTimeOfCompletion.getDayOfMonth() == localEstimatedTimeOfCompletion.getDayOfMonth(); - }); + + return resultList.stream() + .filter(production -> { + LocalDate productionEstimatedTimeOfCompletion = Instant.ofEpochMilli(production.getEstimatedTimeOfCompletion().getTime()) + .atOffset(ZoneOffset.UTC) + .toLocalDate(); + return productionEstimatedTimeOfCompletion.getDayOfMonth() == localEstimatedTimeOfCompletion.getDayOfMonth() + && productionEstimatedTimeOfCompletion.getMonth() == localEstimatedTimeOfCompletion.getMonth() && + productionEstimatedTimeOfCompletion.getYear() == localEstimatedTimeOfCompletion.getYear(); + }).toList(); + } + if (ownMaterialNumber.isPresent() && bpnl.isPresent() && bpns.isPresent()) { + return repository.getForOwnMaterialNumberAndPartnerBPNLAndBPNS(ownMaterialNumber.get(), bpnl.get(), bpns.get()); } - return stream.toList(); + if (ownMaterialNumber.isPresent() && bpnl.isPresent()) { + return repository.getForOwnMaterialNumberAndPartnerBPNL(ownMaterialNumber.get(), bpnl.get()); + } + if (ownMaterialNumber.isPresent() && bpns.isPresent()) { + return repository.getForOwnMaterialNumberAndBPNS(ownMaterialNumber.get(), bpns.get()); + } + if (ownMaterialNumber.isPresent()) { + return repository.getForOwnMaterialNumber(ownMaterialNumber.get()); + } + return List.of(); + } public final List getQuantityForDays(String material, String partnerBpnl, String siteBpns, int numberOfDays) { @@ -96,18 +106,24 @@ public final List getQuantityForDays(String material, String partnerBpnl return quantities; } + public abstract boolean validate(T production); + public final T update(T production) { if (production.getUuid() == null || repository.findById(production.getUuid()).isEmpty()) { return null; } - return repository.save(production); + if (validate(production)) { + return repository.save(production); + } else { + return null; + } } public final void delete(UUID uuid) { repository.deleteById(uuid); } - private final double getSumOfQuantities(List productions) { + private double getSumOfQuantities(List productions) { double sum = 0; for (T production : productions) { sum += production.getQuantity(); diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ReportedProductionService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ReportedProductionService.java index 69070ef7..3b2bf323 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ReportedProductionService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/production/logic/service/ReportedProductionService.java @@ -20,13 +20,13 @@ See the NOTICE file(s) distributed with this work for additional package org.eclipse.tractusx.puris.backend.production.logic.service; -import java.util.List; -import java.util.function.Function; - import org.eclipse.tractusx.puris.backend.production.domain.model.ReportedProduction; import org.eclipse.tractusx.puris.backend.production.domain.repository.ReportedProductionRepository; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.function.Function; + @Service public class ReportedProductionService extends ProductionService { private final ReportedProductionRepository repository; @@ -34,6 +34,7 @@ public class ReportedProductionService extends ProductionService validator; public ReportedProductionService(ReportedProductionRepository repository) { + super(repository); this.repository = repository; this.validator = this::validate; } @@ -59,6 +60,7 @@ public final List createAll(List product return repository.saveAll(productions); } + @Override public boolean validate(ReportedProduction production) { return production.getQuantity() > 0 &&