Skip to content
Snippets Groups Projects
Commit c9938409 authored by Jan Kuchař's avatar Jan Kuchař
Browse files

Migrated to PHP7 types

parent ea0f17dd
No related branches found
No related tags found
No related merge requests found
<?php
use Ramsey\Uuid\UuidInterface;
/**
* Collection of domain events
......@@ -7,7 +8,7 @@ class AggregateHistory extends ArrayObject {
private $aggregateId;
public function __construct($aggregateId, DomainEvents $domainEvents)
public function __construct(UuidInterface $aggregateId, DomainEvents $domainEvents)
{
$this->aggregateId = $aggregateId;
......@@ -17,10 +18,7 @@ class AggregateHistory extends ArrayObject {
parent::__construct((array) $domainEvents);
}
/**
* @return array|null|object
*/
public function getAggregateId()
public function getAggregateId(): UuidInterface
{
return $this->aggregateId;
}
......
<?php
use Ramsey\Uuid\UuidInterface;
class AggregatePersister
{
public function save(string $aggregateRoot, AbstractAggregate $aggregate) : void {
}
public function load(string $aggregateRoot, UuidInterface $id): AbstractAggregate {
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
interface RecordsEvents
{
public function getRecordedEvents();
public function getRecordedEvents(): DomainEvents;
public function clearRecordedEvents();
}
\ No newline at end of file
......@@ -7,7 +7,7 @@ abstract class AbstractAggregate
* @param \DomainEvent $domainEvent
* @return string
*/
private function getApplyMethodForDomainEvent(DomainEvent $domainEvent)
private function getApplyMethodForDomainEvent(DomainEvent $domainEvent): string
{
return "apply" . get_class($domainEvent);
}
......@@ -17,7 +17,8 @@ abstract class AbstractAggregate
* @param \DomainEvent $domainEvent
* @internal
*/
public function applyIfAccepts(DomainEvent $domainEvent) {
public function applyIfAccepts(DomainEvent $domainEvent)
{
if(method_exists($this, $this->getApplyMethodForDomainEvent($domainEvent))) {
$this->apply($domainEvent);
}
......@@ -27,7 +28,8 @@ abstract class AbstractAggregate
* Apply domain event; if objects does not accepts this event -> fail
* @param \DomainEvent $domainEvent
*/
public function apply(DomainEvent $domainEvent) {
public function apply(DomainEvent $domainEvent)
{
$method = $this->getApplyMethodForDomainEvent($domainEvent);
$this->$method($domainEvent);
}
......
......@@ -22,17 +22,17 @@ final class Basket extends AbstractAggregate implements RecordsEvents
* @param \BasketId $basketId
* @return \Basket
*/
public static function pickUp(BasketId $basketId)
public static function pickUp(BasketId $basketId): self
{
$basket = new Basket($basketId);
$basket->recordThat(new BasketWasPickedUp($basketId));
return $basket;
}
public static function reconstituteFrom(AggregateHistory $aggregateHistory)
public static function reconstituteFrom(AggregateHistory $aggregateHistory): self
{
$basketId = $aggregateHistory->getAggregateId();
$basket = new static($basketId);
$basket = new static(new BasketId($basketId));
foreach($aggregateHistory as $event) {
$basket->apply($event);
......@@ -106,14 +106,15 @@ final class Basket extends AbstractAggregate implements RecordsEvents
}
}
private function isProductInBasket(ProductId $productId) {
private function isProductInBasket(ProductId $productId): bool
{
return isset($this->itemsCountById[(string) $productId]) && ($this->itemsCountById[(string) $productId] > 0);
}
// -------- implementation of RecordsEvents ------------------
private $recordedEvents = [];
public function getRecordedEvents()
public function getRecordedEvents(): DomainEvents
{
return new DomainEvents($this->recordedEvents);
}
......
<?php
use Ramsey\Uuid\UuidInterface;
class BasketWasPickedUp implements DomainEvent
{
private $basketId;
......@@ -13,11 +15,8 @@ class BasketWasPickedUp implements DomainEvent
$this->basketId = $basketId;
}
/**
* @return \BasketId
*/
public function getAggregateId()
public function getAggregateId(): UuidInterface
{
return $this->basketId;
return $this->basketId->getId();
}
}
\ No newline at end of file
<?php
use Ramsey\Uuid\UuidInterface;
interface DomainEvent
{
/**
* Aggregate instance identifier (must be unique per aggregate)
* @return \Ramsey\Uuid\Uuid
*/
public function getAggregateId();
public function getAggregateId(): UuidInterface;
}
\ No newline at end of file
<?php
use Ramsey\Uuid\UuidInterface;
class ProductWasAddedToBasket implements DomainEvent
{
private $basketId;
......@@ -19,23 +21,17 @@ class ProductWasAddedToBasket implements DomainEvent
$this->productName = $productName;
}
public function getAggregateId()
public function getAggregateId(): UuidInterface
{
return $this->basketId;
return $this->basketId->getId();
}
/**
* @return BasketId
*/
public function getProductId()
public function getProductId(): ProductId
{
return $this->productId;
}
/**
* @return ProductId
*/
public function getProductName()
public function getProductName(): string
{
return $this->productName;
}
......
<?php
use Ramsey\Uuid\UuidInterface;
class ProductWasRemovedFromBasket implements DomainEvent
{
private $basketId;
......@@ -16,18 +18,12 @@ class ProductWasRemovedFromBasket implements DomainEvent
$this->productId = $productId;
}
/**
* @return BasketId
*/
public function getAggregateId()
public function getAggregateId(): UuidInterface
{
return $this->basketId;
return $this->basketId->getId();
}
/**
* @return ProductId
*/
public function getProductId()
public function getProductId(): ProductId
{
return $this->productId;
}
......
<?php
use Ramsey\Uuid\UuidInterface;
abstract class AbstractId {
private $uuid;
......@@ -13,11 +15,12 @@ abstract class AbstractId {
$this->uuid = $uuid;
}
function getId() {
function getId(): UuidInterface
{
return $this->uuid;
}
function __toString()
function __toString(): string
{
return (string) $this->uuid;
}
......
......@@ -74,7 +74,7 @@ class BasketTest extends \Tester\TestCase {
// Act
$reconstitutedBasket = Basket::reconstituteFrom(
new AggregateHistory($basketId, $retrievedEvents = $events)
new AggregateHistory($basketId->getId(), $retrievedEvents = $events)
);
// Assert
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment