-
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