Skip to content

es cqrs.Class.Aggregate

Sclable CI edited this page Oct 7, 2024 · 7 revisions

@sclable/nestjs-libs / es-cqrs / Aggregate

Class: 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
  }
}

Extends

Implements

  • EventSourcedAggregate

Constructors

new Aggregate()

new Aggregate(id, userId): Aggregate

Parameters

id: string

userId: string

Returns

Aggregate

Overrides

AggregateRoot<Event>.constructor

Defined in

packages/es-cqrs/src/aggregate.ts:51

Properties

id

readonly id: string

Implementation of

EventSourcedAggregate.id

Defined in

packages/es-cqrs/src/aggregate.ts:51


revision

revision: number = 0

Implementation of

EventSourcedAggregate.revision

Defined in

packages/es-cqrs/src/aggregate.ts:49


userId

readonly userId: string

Implementation of

EventSourcedAggregate.userId

Defined in

packages/es-cqrs/src/aggregate.ts:51

Methods

apply()

apply(event, options): void

Applies an event. If auto commit is enabled, the event will be published immediately (note: must be merged with the publisher context in order to work). Otherwise, the event will be stored in the internal events array, and will be published when the commit method is called. Also, the corresponding event handler will be called (if exists). For example, if the event is called UserCreatedEvent, the "onUserCreatedEvent" method will be called.

Parameters

event: Event

The event to apply.

options: boolean | object = false

Returns

void

Overrides

AggregateRoot.apply

Defined in

packages/es-cqrs/src/aggregate.ts:59


applyEvent()

protected applyEvent<T>(event, data): void

Apply event helper

Takes care of upping the revision and saving the user ID

Type Parameters

T

event data type

Parameters

event: EventConstructor

event class

data: T

event data

Returns

void

Defined in

packages/es-cqrs/src/aggregate.ts:83


getUncommittedEvents()

getUncommittedEvents(): Event[]

Returns all uncommitted events.

Returns

Event[]

All uncommitted events.

Overrides

AggregateRoot.getUncommittedEvents

Defined in

packages/es-cqrs/src/aggregate.ts:55


uppedRevision()

uppedRevision(): number

Returns

number

an incremented revision for events

Defined in

packages/es-cqrs/src/aggregate.ts:70

Clone this wiki locally