-
Notifications
You must be signed in to change notification settings - Fork 0
Multi instance aggregate
Trym Skaar edited this page Feb 24, 2018
·
1 revision
import {Aggregate} from 'ddbes'
class User extends Aggregate {
// default
static keySchema = [{
name: 'id',
value: id => id || uuid()
}]
changeName(name) {
return this.commit({type: 'UserNameChanged', name})
},
}
static function reducer(state = {}, event, commit) {
switch (event.type) {
case 'Created': {
const {id, name} = event
return {
...state,
id,
name,
createdAt: commit.committedAt
}
}
case 'NameChanged': {
const {name} = event
return {
...state,
name,
updatedAt: commit.committedAt
}
}
default: return state
}
}
create({id, name}) {
return this.commit({type: 'Created', id, name})
}
}
async function testing() {
const gudleik = await User.create({name: 'Gudleik'})
await gudleik.changeName('Gudleika')
const gudleika = await User.load(gudleik.id)
await gudleika.changeName('Gudleik')
gudleika = null
await gudleik.hydrate()
gudleik.state.name // Gudleik
}