Merge pull request #7 from ddd-by-examples/tech/app-group-id-changed

group id changed to dddbyexamples
This commit is contained in:
Jakub Pilimon
2018-03-19 07:59:00 +01:00
committed by GitHub
141 changed files with 484 additions and 429 deletions

View File

@@ -22,9 +22,9 @@ Goals of that approach:
- exposure of high quality API.
Examples in code:
- CRUD-able document [ProductDescription](product-management-adapters/src/main/java/pl/com/bottega/factory/product/management/ProductDescription.java)
- persistence of document [ProductDescriptionEntity](product-management-adapters/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionEntity.java)
- CRUD exposed as DAO and REST endpoint [ProductDescriptionDao](product-management-adapters/src/main/java/pl/com/bottega/factory/product/management/ProductDescriptionDao.java)
- CRUD-able document [ProductDescription](product-management-adapters/src/main/java/pl/com/dddbyexamples/factory/product/management/ProductDescription.java)
- persistence of document [ProductDescriptionEntity](product-management-adapters/src/main/java/pl/com/dddbyexamples/factory/product/management/ProductDescriptionEntity.java)
- CRUD exposed as DAO and REST endpoint [ProductDescriptionDao](product-management-adapters/src/main/java/pl/com/dddbyexamples/factory/product/management/ProductDescriptionDao.java)
**Complex Commands (business processing)** expressed in Domain Model which is embedded in hexagonal architecture.
@@ -36,23 +36,23 @@ caused by technological choices or transport models from external services / con
migration and keeping long living projects up to date with fast evolving frameworks and libraries.
Examples of Domain Model in code:
- aggregate [ProductDemand](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemand.java)
- entity [DailyDemand](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DailyDemand.java)
- value object [Adjustment](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/Adjustment.java)
- policy [ReviewPolicy](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/ReviewPolicy.java)
- domain event [DemandedLevelsChanged](shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandedLevelsChanged.java)
- aggregate [ProductDemand](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/ProductDemand.java)
- entity [DailyDemand](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/DailyDemand.java)
- value object [Adjustment](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/Adjustment.java)
- policy [ReviewPolicy](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/ReviewPolicy.java)
- domain event [DemandedLevelsChanged](shared-kernel-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/DemandedLevelsChanged.java)
Examples of Ports in code:
- application service (primary port) [DemandService](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandService.java)
- repository (secondary port) [ProductDemandRepository](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandRepository.java)
- domain events handling (secondary port) [DemandEvents](demand-forecasting-model/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEvents.java)
- application service (primary port) [DemandService](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/DemandService.java)
- repository (secondary port) [ProductDemandRepository](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/ProductDemandRepository.java)
- domain events handling (secondary port) [DemandEvents](demand-forecasting-model/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/DemandEvents.java)
Examples of Adapters in code:
- REST endpoint for complex command (driving adapter)
- command resource [DemandAdjustmentDao](demand-forecasting-adapters/src/main/java/pl/com/bottega/factory/demand/forecasting/command/DemandAdjustmentDao.java)
- command handler [CommandsHandler](demand-forecasting-adapters/src/main/java/pl/com/bottega/factory/demand/forecasting/command/CommandsHandler.java)
- repository implementation (driven adapter) [ProductDemandORMRepository](demand-forecasting-adapters/src/main/java/pl/com/bottega/factory/demand/forecasting/ProductDemandORMRepository.java)
- events propagation (driven adapter) [DemandEventsPropagation](app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsPropagation.java)
- command resource [DemandAdjustmentDao](demand-forecasting-adapters/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/command/DemandAdjustmentDao.java)
- command handler [CommandsHandler](demand-forecasting-adapters/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/command/CommandsHandler.java)
- repository implementation (driven adapter) [ProductDemandORMRepository](demand-forecasting-adapters/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/ProductDemandORMRepository.java)
- events propagation (driven adapter) [DemandEventsPropagation](app-monolith/src/main/java/pl/com/dddbyexamples/factory/demand/forecasting/DemandEventsPropagation.java)
**Complex Query** implemented as direct and simple as possible by:
- fetching persistent read model expected by consumer, the read model is a projection of past domain event,
@@ -67,10 +67,10 @@ Goals of that approach:
- improves reads performance and enable horizontal scalability.
Examples in code:
- projection of domain events to persistent read model [DeliveryForecastProjection](demand-forecasting-adapters/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastProjection.java)
- REST endpoint for persistent read model [DeliveryForecastDao](demand-forecasting-adapters/src/main/java/pl/com/bottega/factory/delivery/planning/projection/DeliveryForecastDao.java)
- read model composed at query execution time [StockForecastQuery](app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/StockForecastQuery.java)
- REST resource processor for NOT persistent read model [StockForecastResourceProcessor](app-monolith/src/main/java/pl/com/bottega/factory/stock/forecast/ressource/StockForecastResourceProcessor.java)
- projection of domain events to persistent read model [DeliveryForecastProjection](demand-forecasting-adapters/src/main/java/pl/com/dddbyexamples/factory/delivery/planning/projection/DeliveryForecastProjection.java)
- REST endpoint for persistent read model [DeliveryForecastDao](demand-forecasting-adapters/src/main/java/pl/com/dddbyexamples/factory/delivery/planning/projection/DeliveryForecastDao.java)
- read model composed at query execution time [StockForecastQuery](app-monolith/src/main/java/pl/com/dddbyexamples/factory/stock/forecast/StockForecastQuery.java)
- REST resource processor for NOT persistent read model [StockForecastResourceProcessor](app-monolith/src/main/java/pl/com/dddbyexamples/factory/stock/forecast/ressource/StockForecastResourceProcessor.java)
## Hexagonal Architecture
Only the most valuable part of that enterprise software is embedded in hexagonal architecture -

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.tools;
package pl.com.dddbyexamples.tools;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RestResource;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.tools;
package pl.com.dddbyexamples.tools;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.tools;
package pl.com.dddbyexamples.tools;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RestResource;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.tools;
package pl.com.dddbyexamples.tools;
import java.util.function.Function;
import java.util.function.Supplier;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.tools;
package pl.com.dddbyexamples.tools;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.annotation.AliasFor;

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>app-monolith</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -16,33 +16,33 @@
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>demand-forecasting-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>shortages-prediction-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>product-management-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>production-planning-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>

View File

@@ -1,8 +0,0 @@
package pl.com.bottega.factory.warehouse;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.bottega.factory.shortages.prediction.calculation.Stock;
public interface WarehouseService {
Stock forRefNo(RefNoId refNo);
}

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory;
package pl.com.dddbyexamples.factory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -6,8 +6,8 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.scheduling.annotation.EnableScheduling;
import pl.com.bottega.factory.shortages.prediction.calculation.Stock;
import pl.com.bottega.factory.warehouse.WarehouseService;
import pl.com.dddbyexamples.factory.shortages.prediction.calculation.Stock;
import pl.com.dddbyexamples.factory.warehouse.WarehouseService;
import java.time.Clock;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.delivery.planning.definition;
package pl.com.dddbyexamples.factory.delivery.planning.definition;
import lombok.AllArgsConstructor;
import org.springframework.data.rest.core.annotation.HandleAfterCreate;
@@ -6,7 +6,7 @@ import org.springframework.data.rest.core.annotation.HandleAfterSave;
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pl.com.bottega.factory.delivery.planning.projection.DeliveryForecastProjection;
import pl.com.dddbyexamples.factory.delivery.planning.projection.DeliveryForecastProjection;
@Component
@Transactional

View File

@@ -1,13 +1,13 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;
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.command.RequiredReviewDao;
import pl.com.bottega.factory.demand.forecasting.command.RequiredReviewEntity;
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandProjection;
import pl.com.bottega.factory.shortages.prediction.monitoring.ShortagePredictionService;
import pl.com.dddbyexamples.factory.delivery.planning.projection.DeliveryForecastProjection;
import pl.com.dddbyexamples.factory.demand.forecasting.command.RequiredReviewDao;
import pl.com.dddbyexamples.factory.demand.forecasting.command.RequiredReviewEntity;
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandProjection;
import pl.com.dddbyexamples.factory.shortages.prediction.monitoring.ShortagePredictionService;
import java.time.Clock;
import java.time.Instant;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.product.management;
package pl.com.dddbyexamples.factory.product.management;
import lombok.AllArgsConstructor;
import org.springframework.data.rest.core.annotation.HandleAfterCreate;
@@ -6,9 +6,9 @@ import org.springframework.data.rest.core.annotation.HandleAfterDelete;
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pl.com.bottega.factory.demand.forecasting.DemandService;
import pl.com.bottega.factory.stock.forecast.ressource.StockForecastDao;
import pl.com.bottega.factory.stock.forecast.ressource.StockForecastEntity;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandService;
import pl.com.dddbyexamples.factory.stock.forecast.ressource.StockForecastDao;
import pl.com.dddbyexamples.factory.stock.forecast.ressource.StockForecastEntity;
@Component
@Transactional

View File

@@ -1,13 +1,13 @@
package pl.com.bottega.factory.shortages.prediction.calculation;
package pl.com.dddbyexamples.factory.shortages.prediction.calculation;
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;
import pl.com.dddbyexamples.factory.delivery.planning.projection.DeliveryForecastDao;
import pl.com.dddbyexamples.factory.delivery.planning.projection.DeliveryForecastEntity;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.production.planning.projection.ProductionOutputDao;
import pl.com.dddbyexamples.factory.shortages.prediction.calculation.ProductionForecast.Item;
import pl.com.dddbyexamples.factory.warehouse.WarehouseService;
import java.time.Clock;
import java.time.LocalDateTime;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.shortages.prediction.monitoring;
package pl.com.dddbyexamples.factory.shortages.prediction.monitoring;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import pl.com.bottega.factory.shortages.prediction.notification.NotificationOfShortage;
import pl.com.dddbyexamples.factory.shortages.prediction.notification.NotificationOfShortage;
@Lazy
@Component

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.stock.forecast;
package pl.com.dddbyexamples.factory.stock.forecast;
import lombok.Builder;
import lombok.Singular;

View File

@@ -1,16 +1,16 @@
package pl.com.bottega.factory.stock.forecast;
package pl.com.dddbyexamples.factory.stock.forecast;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandDao;
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity;
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.Stock;
import pl.com.bottega.factory.stock.forecast.StockForecast.StockForecastBuilder;
import pl.com.bottega.factory.warehouse.WarehouseService;
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandDao;
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandEntity;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.production.planning.projection.ProductionDailyOutputDao;
import pl.com.dddbyexamples.factory.production.planning.projection.ProductionDailyOutputEntity;
import pl.com.dddbyexamples.factory.shortages.prediction.calculation.Stock;
import pl.com.dddbyexamples.factory.stock.forecast.StockForecast.StockForecastBuilder;
import pl.com.dddbyexamples.factory.warehouse.WarehouseService;
import java.time.Clock;
import java.time.LocalDate;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.stock.forecast.ressource;
package pl.com.dddbyexamples.factory.stock.forecast.ressource;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.data.rest.core.config.Projection;
import org.springframework.stereotype.Repository;
import pl.com.bottega.tools.ProjectionRepository;
import pl.com.dddbyexamples.tools.ProjectionRepository;
@Repository
@RepositoryRestResource(path = "stock-forecasts",

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.stock.forecast.ressource;
package pl.com.dddbyexamples.factory.stock.forecast.ressource;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import pl.com.bottega.factory.stock.forecast.StockForecast;
import pl.com.dddbyexamples.factory.stock.forecast.StockForecast;
import javax.persistence.Entity;
import javax.persistence.Id;

View File

@@ -1,11 +1,11 @@
package pl.com.bottega.factory.stock.forecast.ressource;
package pl.com.dddbyexamples.factory.stock.forecast.ressource;
import lombok.AllArgsConstructor;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.ResourceProcessor;
import org.springframework.stereotype.Component;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.bottega.factory.stock.forecast.StockForecastQuery;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.stock.forecast.StockForecastQuery;
@Component
@AllArgsConstructor

View File

@@ -0,0 +1,8 @@
package pl.com.dddbyexamples.factory.warehouse;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.shortages.prediction.calculation.Stock;
public interface WarehouseService {
Stock forRefNo(RefNoId refNo);
}

View File

@@ -1,13 +1,13 @@
package pl.com.bottega.factory
package pl.com.dddbyexamples.factory
import pl.com.bottega.factory.demand.forecasting.AdjustDemand
import pl.com.bottega.factory.demand.forecasting.Adjustment
import pl.com.bottega.factory.demand.forecasting.Demand
import pl.com.bottega.factory.demand.forecasting.Document
import pl.com.bottega.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.bottega.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.bottega.factory.product.management.ProductDescription
import pl.com.bottega.factory.product.management.ProductDescriptionEntity
import pl.com.dddbyexamples.factory.demand.forecasting.AdjustDemand
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.Document
import pl.com.dddbyexamples.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.dddbyexamples.factory.product.management.ProductDescription
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionEntity
import java.time.Instant
import java.time.LocalDate

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.integration
package pl.com.dddbyexamples.factory.integration
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
@@ -9,17 +9,16 @@ import org.springframework.core.ParameterizedTypeReference
import org.springframework.hateoas.Resources
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import pl.com.bottega.factory.AppConfiguration
import pl.com.bottega.factory.ProductTrait
import pl.com.bottega.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.bottega.factory.product.management.ProductDescriptionEntity
import pl.com.bottega.tools.IntegrationTest
import pl.com.dddbyexamples.factory.AppConfiguration
import pl.com.dddbyexamples.factory.ProductTrait
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionEntity
import pl.com.dddbyexamples.tools.IntegrationTest
import spock.lang.Specification
import java.time.Clock
import java.time.LocalDate
import java.time.ZoneId
import java.time.LocalDateF
import static java.time.Instant.from
import static java.time.ZoneId.systemDefault

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.integration
package pl.com.dddbyexamples.factory.integration
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
@@ -10,15 +10,15 @@ import org.springframework.core.ParameterizedTypeReference
import org.springframework.hateoas.Resources
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import pl.com.bottega.factory.AppConfiguration
import pl.com.bottega.factory.ProductTrait
import pl.com.bottega.factory.demand.forecasting.Adjustment
import pl.com.bottega.factory.demand.forecasting.Demand
import pl.com.bottega.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.bottega.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.bottega.factory.product.management.ProductDescriptionEntity
import pl.com.bottega.tools.IntegrationTest
import pl.com.dddbyexamples.factory.AppConfiguration
import pl.com.dddbyexamples.factory.ProductTrait
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionEntity
import pl.com.dddbyexamples.tools.IntegrationTest
import spock.lang.Specification
import java.time.Clock

View File

@@ -1,4 +1,4 @@
package src.test.groovy.pl.com.bottega.factory.integration
package pl.com.dddbyexamples.factory.integration
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
@@ -11,18 +11,18 @@ import org.springframework.hateoas.Resource
import org.springframework.hateoas.Resources
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import pl.com.bottega.factory.AppConfiguration
import pl.com.bottega.factory.ProductTrait
import pl.com.bottega.factory.demand.forecasting.Adjustment
import pl.com.bottega.factory.demand.forecasting.Demand
import pl.com.bottega.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.bottega.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.bottega.factory.product.management.ProductDescriptionEntity
import pl.com.bottega.factory.shortages.prediction.calculation.Stock
import pl.com.bottega.factory.shortages.prediction.monitoring.persistence.ShortagesEntity
import pl.com.bottega.factory.warehouse.WarehouseService
import pl.com.bottega.tools.IntegrationTest
import pl.com.dddbyexamples.factory.AppConfiguration
import pl.com.dddbyexamples.factory.ProductTrait
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.command.DemandAdjustmentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DocumentEntity
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandEntity
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionEntity
import pl.com.dddbyexamples.factory.shortages.prediction.calculation.Stock
import pl.com.dddbyexamples.factory.shortages.prediction.monitoring.persistence.ShortagesEntity
import pl.com.dddbyexamples.factory.warehouse.WarehouseService
import pl.com.dddbyexamples.tools.IntegrationTest
import spock.lang.Specification
import java.time.Clock

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>demand-forecasting-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -16,17 +16,17 @@
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>demand-forecasting-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.delivery.planning;
package pl.com.dddbyexamples.factory.delivery.planning;
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.dddbyexamples.factory.delivery.planning.definition.DeliveryPlannerDefinitionDao;
import pl.com.dddbyexamples.factory.delivery.planning.definition.DeliveryPlannerDefinitionEntity;
import java.util.Collections;

View File

@@ -1,10 +1,10 @@
package pl.com.bottega.factory.delivery.planning.definition;
package pl.com.dddbyexamples.factory.delivery.planning.definition;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Singular;
import lombok.Value;
import pl.com.bottega.factory.demand.forecasting.Demand;
import pl.com.dddbyexamples.factory.demand.forecasting.Demand;
import java.time.LocalTime;
import java.util.Collections;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.delivery.planning.definition;
package pl.com.dddbyexamples.factory.delivery.planning.definition;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

View File

@@ -1,8 +1,8 @@
package pl.com.bottega.factory.delivery.planning.definition;
package pl.com.dddbyexamples.factory.delivery.planning.definition;
import lombok.Getter;
import lombok.NoArgsConstructor;
import pl.com.bottega.tools.JsonConverter;
import pl.com.dddbyexamples.tools.JsonConverter;
import javax.persistence.Convert;
import javax.persistence.Entity;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.delivery.planning.projection;
package pl.com.dddbyexamples.factory.delivery.planning.projection;
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.ProjectionRepository;
import pl.com.dddbyexamples.tools.ProjectionRepository;
import java.time.LocalDate;
import java.time.LocalDateTime;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.delivery.planning.projection;
package pl.com.dddbyexamples.factory.delivery.planning.projection;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@@ -1,13 +1,13 @@
package pl.com.bottega.factory.delivery.planning.projection;
package pl.com.dddbyexamples.factory.delivery.planning.projection;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import pl.com.bottega.factory.delivery.planning.DeliveryAutoPlanner;
import pl.com.bottega.factory.delivery.planning.DeliveryAutoPlannerORMRepository;
import pl.com.bottega.factory.demand.forecasting.Demand;
import pl.com.bottega.factory.demand.forecasting.DemandedLevelsChanged;
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandDao;
import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandEntity;
import pl.com.dddbyexamples.factory.delivery.planning.DeliveryAutoPlanner;
import pl.com.dddbyexamples.factory.delivery.planning.DeliveryAutoPlannerORMRepository;
import pl.com.dddbyexamples.factory.demand.forecasting.Demand;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged;
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandDao;
import pl.com.dddbyexamples.factory.demand.forecasting.projection.CurrentDemandEntity;
import java.time.Clock;
import java.time.LocalDate;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;

View File

@@ -1,15 +1,13 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import pl.com.bottega.factory.demand.forecasting.DailyDemand.DemandUpdated;
import pl.com.bottega.factory.demand.forecasting.persistence.DemandDao;
import pl.com.bottega.factory.demand.forecasting.persistence.DemandEntity;
import pl.com.bottega.factory.demand.forecasting.persistence.DemandEntity.DemandEntityId;
import pl.com.bottega.factory.demand.forecasting.persistence.ProductDemandDao;
import pl.com.bottega.factory.demand.forecasting.persistence.ProductDemandEntity;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.bottega.tools.TechnicalId;
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DemandDao;
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DemandEntity;
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.ProductDemandDao;
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.ProductDemandEntity;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.tools.TechnicalId;
import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
@@ -63,7 +61,7 @@ class ProductDemandORMRepository implements ProductDemandRepository {
if (model.updates.size() > 0) {
em.lock(root, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
}
for (DemandUpdated updated : model.updates) {
for (DailyDemand.DemandUpdated updated : model.updates) {
DemandEntity entity;
if (TechnicalId.isPersisted(updated.getId())) {
entity = demandDao.getOne(TechnicalId.get(updated.getId()));
@@ -90,7 +88,7 @@ class ProductDemandORMRepository implements ProductDemandRepository {
entity.getValue().getDocumented(),
entity.getValue().getAdjustment()))
.orElseGet(() -> new DailyDemand(
new DemandEntityId(refNo, date),
new DemandEntity.DemandEntityId(refNo, date),
reviewPolicy,
null,
null

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting.command;
package pl.com.dddbyexamples.factory.demand.forecasting.command;
import lombok.AllArgsConstructor;
import org.springframework.boot.context.event.ApplicationReadyEvent;
@@ -10,8 +10,8 @@ import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pl.com.bottega.factory.demand.forecasting.DemandService;
import pl.com.bottega.factory.demand.forecasting.persistence.DocumentEntity;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandService;
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DocumentEntity;
import java.time.Clock;
import java.time.LocalDate;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.demand.forecasting.command;
package pl.com.dddbyexamples.factory.demand.forecasting.command;
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.CommandRepository;
import pl.com.dddbyexamples.tools.CommandRepository;
import java.time.LocalDate;

View File

@@ -1,10 +1,10 @@
package pl.com.bottega.factory.demand.forecasting.command;
package pl.com.dddbyexamples.factory.demand.forecasting.command;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import pl.com.bottega.factory.demand.forecasting.AdjustDemand;
import pl.com.bottega.tools.JsonConverter;
import pl.com.dddbyexamples.factory.demand.forecasting.AdjustDemand;
import pl.com.dddbyexamples.tools.JsonConverter;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.demand.forecasting.command;
package pl.com.dddbyexamples.factory.demand.forecasting.command;
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.CommandRepository;
import pl.com.dddbyexamples.tools.CommandRepository;
import java.time.LocalDate;
import java.util.List;

View File

@@ -1,12 +1,12 @@
package pl.com.bottega.factory.demand.forecasting.command;
package pl.com.dddbyexamples.factory.demand.forecasting.command;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import pl.com.bottega.factory.demand.forecasting.ApplyReviewDecision;
import pl.com.bottega.factory.demand.forecasting.ReviewDecision;
import pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview;
import pl.com.bottega.tools.JsonConverter;
import pl.com.dddbyexamples.factory.demand.forecasting.ApplyReviewDecision;
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewDecision;
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired.ToReview;
import pl.com.dddbyexamples.tools.JsonConverter;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RestResource;

View File

@@ -1,12 +1,12 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import pl.com.bottega.factory.demand.forecasting.DailyId;
import pl.com.bottega.factory.demand.forecasting.DemandValue;
import pl.com.bottega.tools.JsonConverter;
import pl.com.bottega.tools.TechnicalId;
import pl.com.dddbyexamples.factory.demand.forecasting.DailyId;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandValue;
import pl.com.dddbyexamples.tools.JsonConverter;
import pl.com.dddbyexamples.tools.TechnicalId;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,8 +1,8 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.stereotype.Repository;
import pl.com.bottega.tools.CommandRepository;
import pl.com.dddbyexamples.tools.CommandRepository;
@Repository("documentDao")
@RepositoryRestResource(path = "demand-documents",

View File

@@ -1,11 +1,11 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.LastModifiedDate;
import pl.com.bottega.factory.demand.forecasting.Document;
import pl.com.bottega.tools.JsonConverter;
import pl.com.dddbyexamples.factory.demand.forecasting.Document;
import pl.com.dddbyexamples.tools.JsonConverter;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RestResource;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.demand.forecasting.persistence;
package pl.com.dddbyexamples.factory.demand.forecasting.persistence;
import lombok.Getter;
import lombok.NoArgsConstructor;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.bottega.tools.TechnicalId;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import pl.com.dddbyexamples.tools.TechnicalId;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,11 +1,11 @@
package pl.com.bottega.factory.demand.forecasting.projection;
package pl.com.dddbyexamples.factory.demand.forecasting.projection;
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.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Repository;
import pl.com.bottega.tools.ProjectionRepository;
import pl.com.dddbyexamples.tools.ProjectionRepository;
import java.time.LocalDate;
import java.util.List;

View File

@@ -1,8 +1,8 @@
package pl.com.bottega.factory.demand.forecasting.projection;
package pl.com.dddbyexamples.factory.demand.forecasting.projection;
import lombok.Getter;
import lombok.NoArgsConstructor;
import pl.com.bottega.factory.demand.forecasting.Demand;
import pl.com.dddbyexamples.factory.demand.forecasting.Demand;
import javax.persistence.*;
import java.io.Serializable;

View File

@@ -1,8 +1,8 @@
package pl.com.bottega.factory.demand.forecasting.projection;
package pl.com.dddbyexamples.factory.demand.forecasting.projection;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import pl.com.bottega.factory.demand.forecasting.DemandedLevelsChanged;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged;
@Component
@AllArgsConstructor

View File

@@ -1,13 +1,13 @@
package pl.com.bottega.factory;
package pl.com.dddbyexamples.factory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.scheduling.annotation.EnableScheduling;
import pl.com.bottega.factory.demand.forecasting.DemandEvents;
import pl.com.bottega.factory.demand.forecasting.DemandedLevelsChanged;
import pl.com.bottega.factory.demand.forecasting.ReviewRequired;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged;
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired;
import java.time.Clock;

View File

@@ -1,15 +1,15 @@
package pl.com.bottega.factory.delivery.planning
package pl.com.dddbyexamples.factory.delivery.planning
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinition
import pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinitionDao
import pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinitionEntity
import pl.com.dddbyexamples.factory.delivery.planning.definition.DeliveryPlannerDefinition
import pl.com.dddbyexamples.factory.delivery.planning.definition.DeliveryPlannerDefinitionDao
import pl.com.dddbyexamples.factory.delivery.planning.definition.DeliveryPlannerDefinitionEntity
import spock.lang.Specification
import static java.time.LocalTime.of as time
import static pl.com.bottega.factory.delivery.planning.definition.DeliveryPlannerDefinition.of
import static pl.com.bottega.factory.demand.forecasting.Demand.Schema.*
import static DeliveryPlannerDefinition.of
import static pl.com.dddbyexamples.factory.demand.forecasting.Demand.Schema.*
@SpringBootTest
class DeliveryPlannerDefinitionTest extends Specification {

View File

@@ -1,12 +1,18 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
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.demand.forecasting.persistence.DemandDao
import pl.com.bottega.factory.demand.forecasting.persistence.DemandEntity
import pl.com.bottega.factory.demand.forecasting.persistence.ProductDemandDao
import pl.com.bottega.factory.demand.forecasting.persistence.ProductDemandEntity
import pl.com.dddbyexamples.factory.demand.forecasting.AdjustDemand
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandValue
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewPolicy
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DemandDao
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.DemandEntity
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.ProductDemandDao
import pl.com.dddbyexamples.factory.demand.forecasting.persistence.ProductDemandEntity
import spock.lang.Specification
import javax.persistence.EntityManager

View File

@@ -4,14 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>demand-forecasting-model</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>shared-kernel-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

View File

@@ -1,6 +1,6 @@
package pl.com.bottega.factory.delivery.planning;
package pl.com.dddbyexamples.factory.delivery.planning;
import pl.com.bottega.factory.demand.forecasting.Demand;
import pl.com.dddbyexamples.factory.demand.forecasting.Demand;
import java.time.LocalDate;
import java.time.LocalTime;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.delivery.planning;
package pl.com.dddbyexamples.factory.delivery.planning;
import lombok.Value;

View File

@@ -1,7 +1,7 @@
package pl.com.bottega.factory.delivery.planning;
package pl.com.dddbyexamples.factory.delivery.planning;
import lombok.AllArgsConstructor;
import pl.com.bottega.factory.demand.forecasting.Demand;
import pl.com.dddbyexamples.factory.demand.forecasting.Demand;
import java.time.LocalDate;
import java.util.Map;

View File

@@ -1,7 +1,7 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;
import pl.com.bottega.factory.demand.forecasting.DailyDemand.Result;
import pl.com.dddbyexamples.factory.demand.forecasting.DailyDemand.Result;
import java.time.LocalDate;
import java.util.Comparator;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;

View File

@@ -1,9 +1,8 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Builder;
import lombok.Value;
import pl.com.bottega.factory.demand.forecasting.DemandedLevelsChanged.Change;
import pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged.Change;
import java.util.*;
import java.util.stream.Collectors;
@@ -43,7 +42,7 @@ class DailyDemand {
Result.ResultBuilder result = Result.builder(id);
State state = state();
if (policy.reviewNeeded(this.documented, this.adjustment, documented)) {
result.toReview(new ToReview(id,
result.toReview(new ReviewRequired.ToReview(id,
this.documented,
this.adjustment.getDemand(),
documented)
@@ -117,7 +116,7 @@ class DailyDemand {
return new ResultBuilder().id(id);
}
static List<ToReview> reviews(List<Result> results) {
static List<ReviewRequired.ToReview> reviews(List<Result> results) {
return Collections.unmodifiableList(results.stream()
.filter(result -> result.toReview != null)
.map(result -> result.toReview)

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
public interface DemandEvents {
void emit(DemandedLevelsChanged event);

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import java.time.LocalDate;
import java.util.HashMap;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;

View File

@@ -1,10 +1,8 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;
import pl.com.bottega.factory.demand.forecasting.DailyDemand.Result;
import pl.com.bottega.factory.demand.forecasting.DemandedLevelsChanged.Change;
import pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged.Change;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import java.time.Clock;
import java.time.LocalDate;
@@ -28,11 +26,11 @@ class ProductDemand {
void adjust(AdjustDemand adjustDemand) {
LocalDate today = LocalDate.now(clock);
List<Result> results = adjustDemand
List<DailyDemand.Result> results = adjustDemand
.forEachStartingFrom(today, this::adjustDaily);
updates.addAll(Result.updates(results));
updates.addAll(DailyDemand.Result.updates(results));
Map<DailyId, Change> changes = Result.levelChanges(results);
Map<DailyId, Change> changes = DailyDemand.Result.levelChanges(results);
if (!changes.isEmpty()) {
events.emit(new DemandedLevelsChanged(id, changes));
@@ -42,17 +40,17 @@ class ProductDemand {
void process(Document document) {
LocalDate today = LocalDate.now(clock);
List<Result> results = document
List<DailyDemand.Result> results = document
.forEachStartingFrom(today, this::updateDaily);
updates.addAll(Result.updates(results));
updates.addAll(DailyDemand.Result.updates(results));
Map<DailyId, Change> changes = Result.levelChanges(results);
Map<DailyId, Change> changes = DailyDemand.Result.levelChanges(results);
if (!changes.isEmpty()) {
events.emit(new DemandedLevelsChanged(id, changes));
}
List<ToReview> reviews = Result.reviews(results);
List<ReviewRequired.ToReview> reviews = DailyDemand.Result.reviews(results);
if (!reviews.isEmpty()) {
events.emit(new ReviewRequired(id, reviews));
@@ -65,12 +63,12 @@ class ProductDemand {
}
}
private Result adjustDaily(LocalDate date, Adjustment adjustment) {
private DailyDemand.Result adjustDaily(LocalDate date, Adjustment adjustment) {
DailyDemand demand = demands.get(date);
return demand.adjust(adjustment);
}
private Result updateDaily(LocalDate date, Demand demand) {
private DailyDemand.Result updateDaily(LocalDate date, Demand demand) {
DailyDemand daily = demands.get(date);
return daily.update(demand);
}

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
interface ProductDemandRepository {
ProductDemand get(String refNo);

View File

@@ -1,7 +1,7 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;
import pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview;
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired.ToReview;
import java.util.function.Function;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
public interface ReviewPolicy {

View File

@@ -1,6 +1,7 @@
package pl.com.bottega.factory.delivery.planning
package pl.com.dddbyexamples.factory.delivery.planning
import pl.com.bottega.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.delivery.planning.Delivery
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import spock.lang.PendingFeature
import spock.lang.Specification
@@ -9,7 +10,7 @@ import java.time.LocalDateTime
import java.time.LocalTime
import java.util.stream.Collectors
import static pl.com.bottega.factory.demand.forecasting.Demand.Schema.AtDayStart
import static pl.com.dddbyexamples.factory.demand.forecasting.Demand.Schema.AtDayStart
class DeliveriesSuggestionSpec extends Specification {

View File

@@ -1,6 +1,8 @@
package pl.com.bottega.factory.delivery.planning
package pl.com.dddbyexamples.factory.delivery.planning
import pl.com.bottega.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.delivery.planning.Delivery
import pl.com.dddbyexamples.factory.delivery.planning.DeliveryAutoPlanner
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import spock.lang.Specification
import java.time.LocalDate
@@ -8,8 +10,8 @@ import java.time.LocalDateTime
import java.time.LocalTime
import java.util.stream.Collectors
import static pl.com.bottega.factory.delivery.planning.DeliveriesSuggestion.timesAndFractions
import static pl.com.bottega.factory.demand.forecasting.Demand.Schema.AtDayStart
import static pl.com.dddbyexamples.factory.delivery.planning.DeliveriesSuggestion.timesAndFractions
import static pl.com.dddbyexamples.factory.demand.forecasting.Demand.Schema.AtDayStart
class DeliveryAutoPlannerSpec extends Specification {

View File

@@ -1,12 +1,17 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.DailyId
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewPolicy
import java.time.Clock
import java.time.Instant
import java.time.LocalDate
import java.time.ZoneId
import static DemandedLevelsChanged.Change
import static pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview
import static pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged.Change
import static pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired.ToReview
class DailyDemandBuilder {

View File

@@ -1,5 +1,7 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged
import spock.lang.Specification
import java.time.LocalDate

View File

@@ -1,10 +1,12 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandService
import spock.lang.Specification
import java.time.LocalDate
import static pl.com.bottega.factory.demand.forecasting.ReviewDecision.PICK_NEW
import static pl.com.dddbyexamples.factory.demand.forecasting.ReviewDecision.PICK_NEW
class DemandServiceSpec extends Specification implements ProductDemandTrait {

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import java.time.Clock
import java.time.LocalDate

View File

@@ -1,5 +1,7 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged
import spock.lang.Specification
import java.time.LocalDate

View File

@@ -1,5 +1,7 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import spock.lang.Specification
class KeepingDailyDemandsSpec extends Specification {

View File

@@ -1,11 +1,21 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.bottega.factory.product.management.RefNoId
import pl.com.dddbyexamples.factory.demand.forecasting.AdjustDemand
import pl.com.dddbyexamples.factory.demand.forecasting.Adjustment
import pl.com.dddbyexamples.factory.demand.forecasting.ApplyReviewDecision
import pl.com.dddbyexamples.factory.demand.forecasting.DailyId
import pl.com.dddbyexamples.factory.demand.forecasting.Demand
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged
import pl.com.dddbyexamples.factory.demand.forecasting.Document
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewDecision
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired
import pl.com.dddbyexamples.factory.product.management.RefNoId
import java.time.*
import static DemandedLevelsChanged.Change
import static pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview
import static pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged.Change
import static pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired.ToReview
class ProductDemandBuilder {

View File

@@ -1,8 +1,15 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.AdjustDemand
import pl.com.dddbyexamples.factory.demand.forecasting.ApplyReviewDecision
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged
import pl.com.dddbyexamples.factory.demand.forecasting.Document
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewDecision
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired
import java.time.LocalDate
import static pl.com.bottega.factory.demand.forecasting.ReviewRequired.ToReview
import static pl.com.dddbyexamples.factory.demand.forecasting.ReviewRequired.ToReview
trait ProductDemandTrait {

View File

@@ -1,10 +1,11 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.ReviewPolicy
import spock.lang.Specification
import static pl.com.bottega.factory.demand.forecasting.Adjustment.strong
import static pl.com.bottega.factory.demand.forecasting.Adjustment.weak
import static pl.com.bottega.factory.demand.forecasting.Demand.of
import static pl.com.dddbyexamples.factory.demand.forecasting.Adjustment.strong
import static pl.com.dddbyexamples.factory.demand.forecasting.Adjustment.weak
import static pl.com.dddbyexamples.factory.demand.forecasting.Demand.of
class ReviewPolicySpec extends Specification {

View File

@@ -1,10 +1,12 @@
package pl.com.bottega.factory.demand.forecasting
package pl.com.dddbyexamples.factory.demand.forecasting
import pl.com.dddbyexamples.factory.demand.forecasting.DemandEvents
import pl.com.dddbyexamples.factory.demand.forecasting.DemandedLevelsChanged
import spock.lang.Specification
import java.time.LocalDate
import static pl.com.bottega.factory.demand.forecasting.ReviewDecision.*
import static pl.com.dddbyexamples.factory.demand.forecasting.ReviewDecision.*
class ReviewProcessingSpec extends Specification implements ProductDemandTrait {

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>factory</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>product-management-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -16,12 +16,12 @@
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.product.management;
package pl.com.dddbyexamples.factory.product.management;
import lombok.Value;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.product.management;
package pl.com.dddbyexamples.factory.product.management;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

View File

@@ -1,8 +1,8 @@
package pl.com.bottega.factory.product.management;
package pl.com.dddbyexamples.factory.product.management;
import lombok.Getter;
import lombok.NoArgsConstructor;
import pl.com.bottega.tools.JsonConverter;
import pl.com.dddbyexamples.tools.JsonConverter;
import javax.persistence.Convert;
import javax.persistence.Entity;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory;
package pl.com.dddbyexamples.factory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

View File

@@ -1,7 +1,10 @@
package pl.com.bottega.factory.product.management
package pl.com.dddbyexamples.factory.product.management
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import pl.com.dddbyexamples.factory.product.management.ProductDescription
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionDao
import pl.com.dddbyexamples.factory.product.management.ProductDescriptionEntity
import spock.lang.Specification
import static java.util.Collections.singletonList

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>production-planning-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -16,12 +16,12 @@
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.production.planning.projection;
package pl.com.dddbyexamples.factory.production.planning.projection;
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.ProjectionRepository;
import pl.com.dddbyexamples.tools.ProjectionRepository;
import java.time.LocalDate;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.production.planning.projection;
package pl.com.dddbyexamples.factory.production.planning.projection;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@@ -1,9 +1,9 @@
package pl.com.bottega.factory.production.planning.projection;
package pl.com.dddbyexamples.factory.production.planning.projection;
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.ProjectionRepository;
import pl.com.dddbyexamples.tools.ProjectionRepository;
import java.time.LocalDateTime;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.production.planning.projection;
package pl.com.dddbyexamples.factory.production.planning.projection;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>shared-kernel-model</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;

View File

@@ -1,7 +1,7 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import java.util.Map;

View File

@@ -1,7 +1,7 @@
package pl.com.bottega.factory.demand.forecasting;
package pl.com.dddbyexamples.factory.demand.forecasting;
import lombok.Value;
import pl.com.bottega.factory.product.management.RefNoId;
import pl.com.dddbyexamples.factory.product.management.RefNoId;
import java.time.LocalDate;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package pl.com.bottega.factory.product.management;
package pl.com.dddbyexamples.factory.product.management;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>shortages-prediction-adapters</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -16,17 +16,17 @@
<dependencies>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>shortages-prediction-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pl.com.bottega</groupId>
<groupId>pl.com.dddbyexamples</groupId>
<artifactId>adapter-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>

Some files were not shown because too many files have changed in this diff Show More