-
Notifications
You must be signed in to change notification settings - Fork 2
es cqrs.Aggregate
es-cqrs.Aggregate
Aggregate class that has an id and a revision number
Use the EventSourcableAggregate decorator so that the ES-CQRS module can register possible events. EventRegistry.
Implement event handlers inside with the name on${EventClassName}
to change the aggregates upon events.
Creation events should get a revision of 1
. Modifier events should get an incremented value from the aggregate's
current revision. To make this easier call this.uppedRevision()
for both.
Example:
import { Aggregate, Event } from '@sclable/es-cqrs'
import { AccountCreatedEvent, AccountNameChangedEvent } from './events'
import { v4 as uuidv4 } from 'uuid'
@EventSourcableAggregate(AccountCreatedEvent, AccountNameChangedEvent)
export class AccountAggregate extends Aggregate {
accountName: string
public static create(id: string, userId: string) {
const self = new AccountAggregate(id, userId)
self.apply(new AccountCreatedEvent(id, self.uppedRevision()))
return self
}
public changeName(accountName: string) {
this.apply(new AccountNameChangedEvent(this.id, this.uppedRevision(), {accountName}))
}
public onAccountCreatedEvent(event: AccountCreatedEvent) {
this.accountName = 'default'
}
public onAccountNameChangedEvent(event: AccountNameChangedEvent) {
this.accountName = event.data.name
}
}
-
AggregateRoot
<Event
>↳
Aggregate
EventSourcedAggregate
• new Aggregate(id
, userId
): Aggregate
Name | Type |
---|---|
id |
string |
userId |
string |
AggregateRoot<Event>.constructor
packages/es-cqrs/src/aggregate.ts:51
• Readonly
id: string
EventSourcedAggregate.id
packages/es-cqrs/src/aggregate.ts:51
• revision: number
= 0
EventSourcedAggregate.revision
packages/es-cqrs/src/aggregate.ts:49
• Readonly
userId: string
EventSourcedAggregate.userId
packages/es-cqrs/src/aggregate.ts:51
▸ apply(event
, options?
): void
Name | Type | Default value |
---|---|---|
event |
Event |
undefined |
options |
boolean | { isFromHistory? : boolean ; skipHandler? : boolean } |
false |
void
AggregateRoot.apply
packages/es-cqrs/src/aggregate.ts:59
▸ applyEvent<T
>(event
, data
): void
Apply event helper
Takes care of upping the revision and saving the user ID
Name |
---|
T |
Name | Type | Description |
---|---|---|
event |
EventConstructor |
event class |
data |
T |
event data |
void
Typeparam
T event data type
packages/es-cqrs/src/aggregate.ts:83
▸ getUncommittedEvents(): Event
[]
Event
[]
AggregateRoot.getUncommittedEvents
packages/es-cqrs/src/aggregate.ts:55
▸ uppedRevision(): number
number
an incremented revision for events