1212use TinyBlocks \BuildingBlocks \Event \EventRecords ;
1313use TinyBlocks \BuildingBlocks \Event \EventType ;
1414use TinyBlocks \BuildingBlocks \Event \SequenceNumber ;
15- use TinyBlocks \BuildingBlocks \Event \SnapshotData ;
15+ use TinyBlocks \BuildingBlocks \Snapshot \SnapshotData ;
1616use TinyBlocks \Time \Instant ;
1717
1818trait AggregateRootBehavior
@@ -23,44 +23,44 @@ trait AggregateRootBehavior
2323
2424 private SequenceNumber $ sequenceNumber ;
2525
26- public function getSequenceNumber (): SequenceNumber
26+ public function sequenceNumber (): SequenceNumber
2727 {
2828 return $ this ->sequenceNumber ?? SequenceNumber::initial ();
2929 }
3030
31- public function getModelVersion (): SequenceNumber
31+ public function modelVersion (): ModelVersion
3232 {
33- return SequenceNumber:: of (value: $ this -> modelVersion () );
33+ return ModelVersion:: initial ( );
3434 }
3535
36- public function buildAggregateName (): string
36+ public function aggregateName (): string
3737 {
38- return new ReflectionClass (static ::class)->getShortName ();
38+ return new ReflectionClass (objectOrClass: static ::class)->getShortName ();
3939 }
4040
41- protected function modelVersion (): int
41+ protected function nextSequenceNumber (): void
4242 {
43- return 0 ;
43+ $ this -> sequenceNumber = $ this -> sequenceNumber ()-> next () ;
4444 }
4545
46- protected function nextSequenceNumber (): void
46+ protected function generateSnapshotData (): SnapshotData
4747 {
48- $ this -> sequenceNumber = $ this ->getSequenceNumber ()-> next ( );
48+ return new SnapshotData (payload: $ this ->snapshotState () );
4949 }
5050
51- public function recordedEvents (): EventRecords
51+ protected function snapshotState (): array
5252 {
53- $ records = $ this ->recordedEvents ?? EventRecords::createFromEmpty ();
53+ $ state = get_object_vars ($ this );
54+ unset($ state ['recordedEvents ' ], $ state ['sequenceNumber ' ]);
5455
55- return EventRecords:: createFrom (elements: $ records ) ;
56+ return $ state ;
5657 }
5758
58- protected function generateSnapshotData (): SnapshotData
59+ public function recordedEvents (): EventRecords
5960 {
60- $ state = get_object_vars ($ this );
61- unset($ state ['recordedEvents ' ]);
61+ $ records = $ this ->recordedEvents ?? EventRecords::createFromEmpty ();
6262
63- return new SnapshotData (payload : $ state );
63+ return EventRecords:: createFrom (elements : $ records );
6464 }
6565
6666 protected function buildEventRecord (DomainEvent $ event ): EventRecord
@@ -69,12 +69,12 @@ protected function buildEventRecord(DomainEvent $event): EventRecord
6969 id: Uuid::uuid4 (),
7070 type: EventType::fromEvent (event: $ event ),
7171 event: $ event ,
72- identity: $ this ->getIdentity (),
72+ identity: $ this ->identity (),
7373 revision: $ event ->revision (),
7474 occurredOn: Instant::now (),
7575 snapshotData: $ this ->generateSnapshotData (),
76- aggregateType: $ this ->buildAggregateName (),
77- sequenceNumber: $ this ->getSequenceNumber ()
76+ aggregateType: $ this ->aggregateName (),
77+ sequenceNumber: $ this ->sequenceNumber ()
7878 );
7979 }
8080}
0 commit comments