diff --git a/app-monolith/pom.xml b/app-monolith/pom.xml index 0e29854..b40dac2 100644 --- a/app-monolith/pom.xml +++ b/app-monolith/pom.xml @@ -98,6 +98,15 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java index 9f02274..87228a0 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinitionDao; import pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinitionEntity; +import pl.com.bottega.factory.product.management.RefNoId; import java.util.Collections; @@ -17,7 +18,7 @@ public class DeliveryAutoPlannerRepository { public DeliveryAutoPlanner get(String refNo) { return new DeliveryAutoPlanner(refNo, - ofNullable(dao.findOne(refNo)) + ofNullable(dao.findByRefNo(refNo)) .map(DeliveryPlannerDefinitionEntity::getDefinition) .map(x -> x.map(DeliveriesSuggestion::timesAndFractions)) .orElse(Collections.emptyMap())); diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionDao.java index 7a86336..5b61018 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionDao.java @@ -1,12 +1,15 @@ package pl.com.bottega.factory.delivery.planning.definition; -import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; +import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.stereotype.Repository; @Repository @RepositoryRestResource( - path = "delivery/planning/definitions", - collectionResourceRel = "definitions for auto delivery planning") -public interface DeliveryPlannerDefinitionDao extends JpaRepository { + path = "delivery-definitions", collectionResourceRel = "delivery-definitions") +public interface DeliveryPlannerDefinitionDao extends CrudRepository { + @RestResource(path = "refNos", rel = "refNos") + DeliveryPlannerDefinitionEntity findByRefNo(@Param("refNo") String refNo); } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionEntity.java index 8c9a48d..8c934ce 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/definition/DeliveryPlannerDefinitionEntity.java @@ -5,21 +5,20 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import pl.com.bottega.tools.JsonConverter; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.*; +import java.io.Serializable; @Entity(name = "DeliveryPlannerDefinition") @Data @NoArgsConstructor @EqualsAndHashCode(of = "refNo") -public class DeliveryPlannerDefinitionEntity { +public class DeliveryPlannerDefinitionEntity implements Serializable { @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; @Column private String refNo; - @Column @Convert(converter = DescriptionAsJson.class) private DeliveryPlannerDefinition definition; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastDao.java index 3b85159..f8b2891 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastDao.java @@ -10,11 +10,10 @@ import java.time.LocalDate; import java.util.List; @Repository -@RepositoryRestResource( - path = "delivery/planning/forecasts", - collectionResourceRel = "forecast of deliveries") +@RepositoryRestResource(path = "delivery-forecasts", collectionResourceRel = "delivery-forecasts") public interface DeliveryForecastDao extends ProjectionDao { + @RestResource(exported = false) List findByRefNoAndDateGreaterThanEqual(String refNo, Instant instant); @RestResource(exported = false) diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastEntity.java index bd4c3a8..99ba879 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastEntity.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; @@ -12,7 +13,8 @@ import java.time.LocalDateTime; @Getter @NoArgsConstructor @EqualsAndHashCode(of = "id") -public class DeliveryForecastEntity { +public class DeliveryForecastEntity implements Serializable { + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastProjection.java b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastProjection.java index d27f2b9..8cb2d68 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastProjection.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastProjection.java @@ -24,7 +24,7 @@ public class DeliveryForecastProjection implements DemandEvents { @Override public void emit(DemandedLevelsChanged event) { - DeliveryAutoPlanner planner = planners.get(event.getRefNo()); + DeliveryAutoPlanner planner = planners.get(event.getRefNo().getRefNo()); event.getResults().keySet() .forEach(daily -> forecastDao.deleteByRefNoAndDate( daily.getRefNo(), diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEntity.java index f300fd5..bc3b6fb 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEntity.java @@ -5,6 +5,7 @@ import pl.com.bottega.tools.JsonConverter; import pl.com.bottega.tools.TechnicalId; import javax.persistence.*; +import java.io.Serializable; import java.time.LocalDate; import java.util.Optional; @@ -12,17 +13,15 @@ import java.util.Optional; @Data @NoArgsConstructor @EqualsAndHashCode(of = "id") -public class DemandEntity { +public class DemandEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; - @ManyToOne private ProductDemandEntity product; @Column private LocalDate date; - @Column @Convert(converter = DemandAsJson.class) private DemandValue value; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java index 9f90e09..aae24db 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java @@ -4,7 +4,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import pl.com.bottega.factory.delivery.planning.projection.DeliveryForecastProjection; import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandProjection; -import pl.com.bottega.factory.shortages.prediction.ShortagePredictionMapping; +import pl.com.bottega.factory.shortages.prediction.ShortagePredictionEventsMapping; @Lazy @Component @@ -12,7 +12,7 @@ class DemandEventsMapping implements DemandEvents { CurrentDemandProjection demands; DeliveryForecastProjection deliveries; - ShortagePredictionMapping predictions; + ShortagePredictionEventsMapping predictions; @Override public void emit(DemandedLevelsChanged event) { diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandORMRepository.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandORMRepository.java index 24a7ad4..6198a99 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandORMRepository.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandORMRepository.java @@ -74,12 +74,9 @@ class DemandORMRepository { entity = demandDao.getOne(TechnicalId.get(updated.getId())); } else { entity = new DemandEntity(root, updated.getId().getDate()); - } - entity.set(updated.getDocumented(), updated.getAdjustment()); - - if (!TechnicalId.isPersisted(updated.getId())) { demandDao.save(entity); } + entity.set(updated.getDocumented(), updated.getAdjustment()); } } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandEntity.java index a9fe163..b42aeb7 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandEntity.java @@ -8,12 +8,13 @@ import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.tools.TechnicalId; import javax.persistence.*; +import java.io.Serializable; @Entity(name = "ProductDemand") @Data @NoArgsConstructor @EqualsAndHashCode(of = "id") -public class ProductDemandEntity { +public class ProductDemandEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -28,23 +29,21 @@ public class ProductDemandEntity { } ProductDemandEntityId createId() { - return new ProductDemandEntityId(refNo, id, version); + return new ProductDemandEntityId(refNo, id); } @Getter static class ProductDemandEntityId extends RefNoId implements TechnicalId { Long id; - Long version; ProductDemandEntityId(String refNo) { super(refNo); } - ProductDemandEntityId(String refNo, long id, Long version) { + ProductDemandEntityId(String refNo, long id) { super(refNo); this.id = id; - this.version = version; } } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/persistence/DemandDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/persistence/DemandDao.java index 39464e7..3e3c218 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/persistence/DemandDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/persistence/DemandDao.java @@ -13,5 +13,4 @@ import java.util.List; public interface DemandDao extends JpaRepository { List findByProductRefNoAndDateGreaterThanEqual(String refNo, LocalDate now); - } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandDao.java index 0805091..e97e8da 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandDao.java @@ -9,11 +9,10 @@ import java.time.LocalDate; import java.util.List; @Repository -@RepositoryRestResource( - path = "demand/forecasts", - collectionResourceRel = "forecast of customers demands") +@RepositoryRestResource(path = "demand-forecasts", collectionResourceRel = "demand-forecasts") public interface CurrentDemandDao extends ProjectionDao { + @RestResource(exported = false) List findByRefNoAndDateGreaterThanEqual(String refNo, LocalDate date); @RestResource(exported = false) diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandEntity.java index 8b72bf0..159384a 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandEntity.java @@ -6,13 +6,15 @@ import lombok.NoArgsConstructor; import pl.com.bottega.factory.demand.forecasting.Demand; import javax.persistence.*; +import java.io.Serializable; import java.time.LocalDate; @Entity(name = "CurrentDemand") @Getter @NoArgsConstructor @EqualsAndHashCode(of = "id") -public class CurrentDemandEntity { +public class CurrentDemandEntity implements Serializable { + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionDao.java index 2ac90d6..d96f52e 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionDao.java @@ -5,18 +5,10 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.stereotype.Repository; -import java.util.Optional; - @Repository - @RepositoryRestResource( - path = "product/management/descriptions", - collectionResourceRel = "descriptions of products") -public interface ProductDescriptionDao extends JpaRepository { - - @RestResource(exported = false) - default Optional description(String refNo) { - return Optional.ofNullable(findOne(refNo)) - .map(ProductDescriptionEntity::getDescription); - } + path = "product-descriptions", collectionResourceRel = "product-descriptions") +public interface ProductDescriptionDao extends JpaRepository { + @RestResource(path = "refNos", rel = "refNos") + ProductDescriptionEntity findByRefNo(String refNo); } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionEntity.java index e1ec658..b6201b1 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionEntity.java @@ -5,21 +5,20 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import pl.com.bottega.tools.JsonConverter; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.*; +import java.io.Serializable; @Entity(name = "ProductDescription") @Data @NoArgsConstructor @EqualsAndHashCode(of = "refNo") -public class ProductDescriptionEntity { +public class ProductDescriptionEntity implements Serializable { @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; @Column private String refNo; - @Column @Convert(converter = DescriptionAsJson.class) ProductDescription description; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputDao.java index 2498ffb..d9ba987 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputDao.java @@ -8,9 +8,7 @@ import java.time.LocalDate; import java.util.List; @Repository -@RepositoryRestResource( - path = "production/planning/outputs/daily", - collectionResourceRel = "forecast of production daily outputs") +@RepositoryRestResource(path = "production-outputs-daily", collectionResourceRel = "production-outputs-daily") public interface ProductionDailyOutputDao extends ProjectionDao { List findByRefNoAndDateGreaterThanEqual(String refNo, LocalDate date); diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputEntity.java index bc93623..6c07912 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionDailyOutputEntity.java @@ -5,13 +5,14 @@ import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.io.Serializable; import java.time.LocalDate; @Entity(name = "ProductionDailyOutput") @Getter @NoArgsConstructor -@EqualsAndHashCode(of = "id") -public class ProductionDailyOutputEntity { +@EqualsAndHashCode(of = "refNo") +public class ProductionDailyOutputEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputDao.java index f214884..d765597 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputDao.java @@ -8,9 +8,7 @@ import java.time.Instant; import java.util.List; @Repository -@RepositoryRestResource( - path = "production/planning/outputs", - collectionResourceRel = "forecast of production outputs") +@RepositoryRestResource(path = "production-outputs", collectionResourceRel = "production-outputs") public interface ProductionOutputDao extends ProjectionDao { List findByRefNoAndStartGreaterThanEqual(String refNo, Instant instant); diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputEntity.java index 1448f7e..5c41d2d 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/production/planning/projection/ProductionOutputEntity.java @@ -5,14 +5,15 @@ import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.io.Serializable; import java.time.Duration; import java.time.LocalDateTime; @Entity(name = "ProductionOutput") @Getter @NoArgsConstructor -@EqualsAndHashCode(of = "id") -public class ProductionOutputEntity { +@EqualsAndHashCode(of = "refNo") +public class ProductionOutputEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionMapping.java b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionEventsMapping.java similarity index 91% rename from app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionMapping.java rename to app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionEventsMapping.java index f678b9f..1516953 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionMapping.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/ShortagePredictionEventsMapping.java @@ -7,10 +7,12 @@ import pl.com.bottega.factory.demand.forecasting.DemandEvents; import pl.com.bottega.factory.shortages.prediction.monitoring.ShortagePredictionProcess; import pl.com.bottega.factory.shortages.prediction.monitoring.ShortagePredictionProcessRepository; +import java.util.Set; + @Lazy @Component @AllArgsConstructor -public class ShortagePredictionMapping implements DemandEvents { +public class ShortagePredictionEventsMapping implements DemandEvents { private ShortagePredictionProcessRepository repository; diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/ForecastORMProvider.java b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/ForecastORMProvider.java index 0f038aa..94bc4e5 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/ForecastORMProvider.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/ForecastORMProvider.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import pl.com.bottega.factory.delivery.planning.projection.DeliveryForecastDao; import pl.com.bottega.factory.delivery.planning.projection.DeliveryForecastEntity; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.production.planning.projection.ProductionOutputDao; import pl.com.bottega.factory.shortages.prediction.calculation.ProductionForecast.Item; import pl.com.bottega.factory.warehouse.WarehouseService; @@ -28,13 +29,13 @@ class ForecastORMProvider implements Forecasts { private Clock clock; @Override - public Forecast get(String refNo, int daysAhead) { + public Forecast get(RefNoId refNo, int daysAhead) { CurrentStock stock = stocks.forRefNo(refNo); Instant now = Instant.now(clock); LocalDateTime time = now.atZone(clock.getZone()).toLocalDateTime(); Map demands = this.demands - .findByRefNoAndDateGreaterThanEqual(refNo, now).stream() + .findByRefNoAndDateGreaterThanEqual(refNo.getRefNo(), now).stream() .collect(toMap( DeliveryForecastEntity::getTime, DeliveryForecastEntity::getLevel @@ -44,7 +45,7 @@ class ForecastORMProvider implements Forecasts { Demands demand = new Demands(demands); ProductionOutputs outputs = new ProductionForecast( - this.outputs.findByRefNoAndStartGreaterThanEqual(refNo, now).stream() + this.outputs.findByRefNoAndStartGreaterThanEqual(refNo.getRefNo(), now).stream() .map(e -> new Item( e.getStart(), e.getDuration(), @@ -52,6 +53,6 @@ class ForecastORMProvider implements Forecasts { .collect(Collectors.toList()) ).outputsInTimes(time, demands.keySet()); - return new Forecast(refNo, time, times, stock, outputs, demand); + return new Forecast(refNo.getRefNo(), time, times, stock, outputs, demand); } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepository.java b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepository.java index 1b1b310..d0f8450 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepository.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepository.java @@ -2,12 +2,13 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.shortages.prediction.Configuration; -import pl.com.bottega.factory.shortages.prediction.Shortages; import pl.com.bottega.factory.shortages.prediction.calculation.Forecasts; import pl.com.bottega.factory.shortages.prediction.notification.NotificationOfShortage; +import pl.com.bottega.tools.TechnicalId; -import static java.util.Optional.ofNullable; +import java.util.Optional; @Component @AllArgsConstructor @@ -20,9 +21,12 @@ class ShortagePredictionProcessORMRepository implements ShortagePredictionProces private final NotificationOfShortage notifications; @Override - public ShortagePredictionProcess get(String refNo) { + public ShortagePredictionProcess get(RefNoId refNo) { + Optional entity = dao.findByRefNo(refNo.getRefNo()); return new ShortagePredictionProcess( - refNo, fetchData(refNo), + entity.map(ShortagesEntity::createId) + .orElseGet(() -> ShortagesEntity.createId(refNo)), + entity.map(ShortagesEntity::getShortages).orElse(null), policy, forecasts, configuration, new EventsHandler() ); } @@ -32,26 +36,29 @@ class ShortagePredictionProcessORMRepository implements ShortagePredictionProces // persisted after event } - private Shortages fetchData(String refNo) { - return ofNullable(dao.findOne(refNo)) - .map(ShortagesEntity::getShortages).orElse(null); + private void save(NewShortage event) { + RefNoId refNo = event.getRefNo(); + ShortagesEntity entity = TechnicalId.findOrDefault( + refNo, dao::findOne, + () -> dao.save(new ShortagesEntity(refNo.getRefNo()))); + entity.setShortages(event.getShortages()); + notifications.emit(event); + } + + private void delete(ShortageSolved event) { + dao.delete(TechnicalId.get(event.getRefNo())); + notifications.emit(event); } private class EventsHandler implements ShortageEvents { @Override public void emit(NewShortage event) { - String refNo = event.getShortages().getRefNo(); - ShortagesEntity entity = ofNullable(dao.findOne(refNo)) - .orElseGet(() -> new ShortagesEntity(refNo)); - entity.setShortages(event.getShortages()); - dao.save(entity); - notifications.emit(event); + save(event); } @Override public void emit(ShortageSolved event) { - dao.delete(event.getRefNo()); - notifications.emit(event); + delete(event); } } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesDao.java index 9a6766d..bf3751f 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesDao.java @@ -1,12 +1,16 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; +import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; +import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.stereotype.Repository; import pl.com.bottega.tools.ProjectionDao; +import java.util.Optional; + @Repository -@RepositoryRestResource( - path = "shortages/prediction/current", - collectionResourceRel = "predicted shortages") -public interface ShortagesDao extends ProjectionDao { +@RepositoryRestResource(path = "shortages", collectionResourceRel = "shortages") +public interface ShortagesDao extends ProjectionDao { + @RestResource(path = "refNos", rel = "refNos") + Optional findByRefNo(@Param("refNo") String refNo); } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesEntity.java index a91e316..60592eb 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagesEntity.java @@ -2,36 +2,63 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NoArgsConstructor; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.shortages.prediction.Shortages; import pl.com.bottega.tools.JsonConverter; +import pl.com.bottega.tools.TechnicalId; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.*; +import java.io.Serializable; @Entity(name = "Shortage") @Data @NoArgsConstructor @EqualsAndHashCode(of = "refNo") -class ShortagesEntity { +public class ShortagesEntity implements Serializable { @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + @Version + private Long version; @Column private String refNo; - - @Column + @Column(length = 1024) @Convert(converter = ShortagesAsJson.class) - Shortages shortages; + private Shortages shortages; ShortagesEntity(String refNo) { this.refNo = refNo; } + RefNoId createId() { + return new ShortagesEntityId(refNo, id); + } + + static RefNoId createId(RefNoId id) { + return id instanceof ShortagesEntityId ? id : new ShortagesEntityId(id.getRefNo()); + } + public static class ShortagesAsJson extends JsonConverter { public ShortagesAsJson() { super(Shortages.class); } } + + @Getter + static class ShortagesEntityId extends RefNoId implements TechnicalId { + + Long id; + + ShortagesEntityId(String refNo) { + super(refNo); + } + + ShortagesEntityId(String refNo, long id) { + super(refNo); + this.id = id; + } + } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastController.java b/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastController.java index fafffe4..8248cb9 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastController.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastController.java @@ -7,9 +7,10 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import pl.com.bottega.factory.product.management.RefNoId; -@Controller -@RequestMapping("/stock/forecasts") +//@Controller +//@RequestMapping("/stock/forecasts") @AllArgsConstructor class StockForecastController { @@ -18,6 +19,6 @@ class StockForecastController { @RequestMapping(value = "/{refNo}", method = RequestMethod.GET) @Transactional(readOnly = true) ResponseEntity get(@PathVariable("refNo") String refNo) { - return ResponseEntity.ok(query.get(refNo)); + return ResponseEntity.ok(query.get(new RefNoId(refNo))); } } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastQuery.java b/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastQuery.java index bef92d0..efc0a5a 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastQuery.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastQuery.java @@ -8,6 +8,7 @@ import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity; import pl.com.bottega.factory.product.management.ProductDescription; import pl.com.bottega.factory.product.management.ProductDescriptionDao; import pl.com.bottega.factory.product.management.ProductDescriptionEntity; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.production.planning.projection.ProductionDailyOutputDao; import pl.com.bottega.factory.production.planning.projection.ProductionDailyOutputEntity; import pl.com.bottega.factory.shortages.prediction.calculation.CurrentStock; @@ -32,26 +33,26 @@ class StockForecastQuery { private final ProductDescriptionDao descriptions; private final Clock clock; - StockForecast get(String refNo) { + StockForecast get(RefNoId refNo) { CurrentStock stock = stocks.forRefNo(refNo); LocalDate today = LocalDate.now(clock); - return build(refNo, today, Optional.ofNullable(descriptions.findOne(refNo)) + return build(refNo, today, Optional.ofNullable(descriptions.findByRefNo(refNo.getRefNo())) .map(ProductDescriptionEntity::getDescription).orElse(null), stock, this.demands - .findByRefNoAndDateGreaterThanEqual(refNo, today).stream() + .findByRefNoAndDateGreaterThanEqual(refNo.getRefNo(), today).stream() .collect(toMap( CurrentDemandEntity::getDate, CurrentDemandEntity::getLevel )), this.outputs - .findByRefNoAndDateGreaterThanEqual(refNo, today).stream() + .findByRefNoAndDateGreaterThanEqual(refNo.getRefNo(), today).stream() .collect(toMap( ProductionDailyOutputEntity::getDate, ProductionDailyOutputEntity::getOutput ))); } - private StockForecast build(String refNo, LocalDate today, + private StockForecast build(RefNoId refNo, LocalDate today, ProductDescription description, CurrentStock stock, Map demands, Map outputs) { @@ -69,7 +70,7 @@ class StockForecastQuery { )); } return builder - .refNo(refNo) + .refNo(refNo.getRefNo()) .description(description) .build(); } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/warehouse/WarehouseService.java b/app-monolith/src/main/java/pl/com/bottega/factory/warehouse/WarehouseService.java index d682829..212b490 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/warehouse/WarehouseService.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/warehouse/WarehouseService.java @@ -1,7 +1,8 @@ package pl.com.bottega.factory.warehouse; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.shortages.prediction.calculation.CurrentStock; public interface WarehouseService { - CurrentStock forRefNo(String refNo); + CurrentStock forRefNo(RefNoId refNo); } diff --git a/app-monolith/src/main/java/pl/com/bottega/tools/TechnicalId.java b/app-monolith/src/main/java/pl/com/bottega/tools/TechnicalId.java index ee568df..06458ea 100644 --- a/app-monolith/src/main/java/pl/com/bottega/tools/TechnicalId.java +++ b/app-monolith/src/main/java/pl/com/bottega/tools/TechnicalId.java @@ -1,5 +1,8 @@ package pl.com.bottega.tools; +import java.util.function.Function; +import java.util.function.Supplier; + public interface TechnicalId { Long getId(); @@ -9,10 +12,18 @@ public interface TechnicalId { } static Long get(Object id) { - return (id instanceof TechnicalId) ? ((TechnicalId) id).getId() : null; + return isPersisted(id) ? ((TechnicalId) id).getId() : null; } static boolean isPersisted(Object id) { return (id instanceof TechnicalId) && ((TechnicalId) id).isPersisted(); } + + static T findOrDefault(Object id, Function ifPresent, Supplier orElse) { + if (isPersisted(id)) { + return ifPresent.apply(get(id)); + } else { + return orElse.get(); + } + } } diff --git a/app-monolith/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepositoryTest.groovy b/app-monolith/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepositoryTest.groovy index 4e3e768..a18a1b2 100644 --- a/app-monolith/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepositoryTest.groovy +++ b/app-monolith/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessORMRepositoryTest.groovy @@ -3,6 +3,7 @@ package pl.com.bottega.factory.shortages.prediction.monitoring import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.annotation.Commit +import pl.com.bottega.factory.product.management.RefNoId import pl.com.bottega.factory.shortages.prediction.Shortages import pl.com.bottega.factory.shortages.prediction.calculation.Forecasts import pl.com.bottega.factory.shortages.prediction.notification.NotificationOfShortage @@ -18,8 +19,8 @@ import static pl.com.bottega.factory.shortages.prediction.monitoring.NewShortage @Commit class ShortagePredictionProcessORMRepositoryTest extends Specification { - LocalDateTime now = LocalDateTime.now() - String refNo = "3009000" + def now = LocalDateTime.now() + def refNo = "3009000" @Autowired ShortagesDao dao @@ -93,15 +94,15 @@ class ShortagePredictionProcessORMRepositoryTest extends Specification { } Shortages shortagesCurrentlyPersisted() { - dao.findOne(refNo).shortages + dao.findByRefNo(refNo).get().shortages } void noShortagesPersisted() { - assert dao.findOne(refNo) == null + assert dao.findByRefNo(refNo) == Optional.empty() } ShortagePredictionProcess fetchProcess() { - repository.get(refNo) + repository.get(new RefNoId(refNo)) } Shortages noShortages() { @@ -127,10 +128,10 @@ class ShortagePredictionProcessORMRepositoryTest extends Specification { } void processEmitsNewShortage(ShortagePredictionProcess process, Shortages shortages) { - process.events.emit(new NewShortage(DemandChanged, shortages)) + process.events.emit(new NewShortage(process.refNo, DemandChanged, shortages)) } void processEmitsShortageSolved(ShortagePredictionProcess process) { - process.events.emit(new ShortageSolved(refNo)) + process.events.emit(new ShortageSolved(process.refNo)) } } diff --git a/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEvents.java b/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEvents.java index 1e7da58..1f2410e 100644 --- a/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEvents.java +++ b/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEvents.java @@ -19,8 +19,8 @@ public interface DemandEvents { this.results = Collections.unmodifiableMap(results); } - public String getRefNo() { - return id.getRefNo(); + public RefNoId getRefNo() { + return id; } @Value diff --git a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/Forecasts.java b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/Forecasts.java index 7dfae88..d95a328 100644 --- a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/Forecasts.java +++ b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/calculation/Forecasts.java @@ -1,5 +1,7 @@ package pl.com.bottega.factory.shortages.prediction.calculation; +import pl.com.bottega.factory.product.management.RefNoId; + public interface Forecasts { - Forecast get(String refNo, int daysAhead); + Forecast get(RefNoId refNo, int daysAhead); } diff --git a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/NewShortage.java b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/NewShortage.java index da4d9a0..aae0bae 100644 --- a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/NewShortage.java +++ b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/NewShortage.java @@ -1,6 +1,7 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; import lombok.Value; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.shortages.prediction.Shortages; /** @@ -11,6 +12,7 @@ public class NewShortage { public enum After {DemandChanged, PlanChanged, StockChanged, LockedParts} + RefNoId refNo; After trigger; Shortages shortages; } diff --git a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcess.java b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcess.java index c44dff7..3a65af4 100644 --- a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcess.java +++ b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcess.java @@ -1,6 +1,7 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; import lombok.AllArgsConstructor; +import pl.com.bottega.factory.product.management.RefNoId; import pl.com.bottega.factory.shortages.prediction.Configuration; import pl.com.bottega.factory.shortages.prediction.Shortages; import pl.com.bottega.factory.shortages.prediction.calculation.Forecast; @@ -15,7 +16,7 @@ import java.util.Optional; @AllArgsConstructor public class ShortagePredictionProcess { - private final String refNo; + private final RefNoId refNo; private Shortages known; private final ShortageDiffPolicy diffPolicy; @@ -48,7 +49,7 @@ public class ShortagePredictionProcess { boolean areDifferent = diffPolicy.areDifferent(this.known, newlyFound.orElse(null)); if (areDifferent && newlyFound.isPresent()) { this.known = newlyFound.get(); - events.emit(new NewShortage(event, newlyFound.get())); + events.emit(new NewShortage(refNo, event, known)); } else if (known != null && !newlyFound.isPresent()) { this.known = null; events.emit(new ShortageSolved(refNo)); diff --git a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessRepository.java b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessRepository.java index f238c5a..3036065 100644 --- a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessRepository.java +++ b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessRepository.java @@ -1,10 +1,12 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; +import pl.com.bottega.factory.product.management.RefNoId; + /** * Created by michal on 03.02.2017. */ public interface ShortagePredictionProcessRepository { - ShortagePredictionProcess get(String refNo); + ShortagePredictionProcess get(RefNoId refNo); void save(ShortagePredictionProcess model); } diff --git a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortageSolved.java b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortageSolved.java index 09ddca3..416411e 100644 --- a/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortageSolved.java +++ b/shortages-prediction-model/src/main/java/pl/com/bottega/factory/shortages/prediction/monitoring/ShortageSolved.java @@ -1,8 +1,9 @@ package pl.com.bottega.factory.shortages.prediction.monitoring; import lombok.Value; +import pl.com.bottega.factory.product.management.RefNoId; @Value public class ShortageSolved { - String refNo; + RefNoId refNo; } diff --git a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/calculation/ShortagesCalculationAssemblerTrait.groovy b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/calculation/ShortagesCalculationAssemblerTrait.groovy index 0616e91..4f6e569 100644 --- a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/calculation/ShortagesCalculationAssemblerTrait.groovy +++ b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/calculation/ShortagesCalculationAssemblerTrait.groovy @@ -1,5 +1,6 @@ package pl.com.bottega.factory.shortages.prediction.calculation +import pl.com.bottega.factory.product.management.RefNoId import pl.com.bottega.factory.shortages.prediction.Shortages import java.time.Duration @@ -13,7 +14,7 @@ trait ShortagesCalculationAssemblerTrait { Forecasts forecastProvider(CurrentStock stock, Demands demands, ProductionOutputs outputs) { def forecast = forecast(stock, demands, outputs) - return { String refNo, int daysAhead -> forecast } as Forecasts + return { RefNoId refNo, int daysAhead -> forecast } as Forecasts } Forecast forecast(CurrentStock stock, Demands demands, ProductionOutputs outputs) { diff --git a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessSpec.groovy b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessSpec.groovy index a994e95..ffbfb77 100644 --- a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessSpec.groovy +++ b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/monitoring/ShortagePredictionProcessSpec.groovy @@ -1,5 +1,6 @@ package pl.com.bottega.factory.shortages.prediction.monitoring +import pl.com.bottega.factory.product.management.RefNoId import pl.com.bottega.factory.shortages.prediction.Configuration import pl.com.bottega.factory.shortages.prediction.Shortages import pl.com.bottega.factory.shortages.prediction.calculation.Forecasts @@ -8,11 +9,11 @@ import spock.lang.Specification import java.time.LocalDateTime -import static pl.com.bottega.factory.shortages.prediction.monitoring.NewShortage.After; +import static pl.com.bottega.factory.shortages.prediction.monitoring.NewShortage.After class ShortagePredictionProcessSpec extends Specification { - def refNo = "3009000" + def refNo = new RefNoId("3009000") def now = LocalDateTime.now() def forecastAssembler = new ShortagesCalculationAssembler(refNo: refNo, now: now) def events = Mock(ShortageEvents) @@ -170,7 +171,7 @@ class ShortagePredictionProcessSpec extends Specification { } NewShortage newShortage(After after, Map missing) { - new NewShortage(after, forecastAssembler.shortage(missing).get()) + new NewShortage(refNo, after, forecastAssembler.shortage(missing).get()) } ShortageSolved shortageSolved() { diff --git a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/notification/NotificationOfShortageSpec.groovy b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/notification/NotificationOfShortageSpec.groovy index d2f01ff..99bbec2 100644 --- a/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/notification/NotificationOfShortageSpec.groovy +++ b/shortages-prediction-model/src/test/groovy/pl/com/bottega/factory/shortages/prediction/notification/NotificationOfShortageSpec.groovy @@ -1,5 +1,6 @@ package pl.com.bottega.factory.shortages.prediction.notification +import pl.com.bottega.factory.product.management.RefNoId import pl.com.bottega.factory.shortages.prediction.Shortages import pl.com.bottega.factory.shortages.prediction.monitoring.NewShortage import pl.com.bottega.factory.shortages.prediction.monitoring.ShortageSolved @@ -107,7 +108,7 @@ class NotificationOfShortageSpec extends Specification { def notificator = notificator() when: - notificator.emit(new ShortageSolved(refNo)) + notificator.emit(new ShortageSolved(new RefNoId(refNo))) then: 0 * tasks.increasePriorityFor(_) @@ -122,7 +123,7 @@ class NotificationOfShortageSpec extends Specification { } NewShortage newShortage(After after, Shortages shortages) { - new NewShortage(after, shortages) + new NewShortage(new RefNoId(refNo), after, shortages) } Shortages withShortage(