0.2.10-alpha.0 • Published 9 months ago

serverless-cqrs.write-model v0.2.10-alpha.0

Weekly downloads
3
License
ISC
Repository
github
Last release
9 months ago

write-model

The write-model exports two functions repositoryBuilder and commandServiceBuilder.

To initialize the model, you pass an adapter and reducer to the repositoryBuilder to generate a repository. Then you pass the repository and actions to the commandServiceBuilder to generate a list of commands

Example

const {
  repositoryBuilder,
  commandServiceBuilder,
} = require('serverless-cqrs.write-mode')

const adapter = require('./adapter')
const reducer = require('./reducer')
const actions = require('./actions')

const repository = repositoryBuilder.build({
  adapter,
  reducer,
})

module.exports = commandServiceBuilder.build({
  repository,
  actions,
})

repositoryBuilder

Takes a reducer and an adapter and returns a repository. A repository is the layer of our Onion Architecture (see Introduction) which handles data persistence.

The write-model repository has a single method called getById. When invoked, it uses the adapter to load all events for given ID and runs them through the reducer to calculate the current state. It returns an object that contains state and also a save method, which is used to append new events.

Methods

build

build({ adapter, reducer })

builds a repository

Parameters

attributetypedescription
adapterobjectAny object which implements the write-model Adapter Interface.
reducerfunctiona function which, given a list of events, knows how to calculate the current state of an object.

Returns

{ getById } - an object with the getById function.

getById

getById(id)

Loads and returns the current state of an entity. Also returns a save function for appending new events to the data store.

Parameters

attributetypedescription
idstringthe id of the entity

Returns

{ state, save } - an object containing an arbitrary state object, and a save function.

save

save(events)

Appends new events to the datastore

Parameters

attributetypedescription
eventsarrayan array of arbitrary event objects

Returns

null

commandServiceBuilder

Takes a list of actions and a repository and returns an object where action names map to executable commands.

Each command accepts an id and a payload. When invoked, a command loads the current state of the entity from the repo and passes it, and the payload, to the action. The action will perform its validation and if successful, generate one or more events. The command forwards those events to the repository to be appended to the entity.

Methods

build

build({ actions, repository })

Turns actions into commands that can be executed on real objects.

Parameters

attributetypedescription
actionsobjectDomain actions
repositoryobjectgenerated by the repositoryBuilder

Returns

commands - where keys are actions names and values are functions which accept an id and payload