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(