Eventful
![Build status](https://camo.githubusercontent.com/226c1d58ea6d7a5b188257821e2031339e494b944f5bb5697e6635cdef1ef728/68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f39336f35393930776e343661646b3461)
[<AggregateModule>]
module PersonAggregate =
type internal Marker = interface end
type PersonState = {
FirstName : string
LastName : string
}
let state = new StateGen<PersonState>((fun s _ -> s), { PersonState.FirstName = ""; LastName = "" })
type CreatePersonCmd = {
Id : Guid
FirstName : string
LastName : string
}
[<CommandHandler>]
let HandleCreatePerson (cmd : CreatePersonCmd, state : PersonState) =
Handler.Start cmd.Id cmd state
|> Validate.NonNullProperty "FirstName" cmd.FirstName
|> Validate.NonNullProperty "LastName" cmd.LastName
|> Handler.Output
{
PersonCreatedEvt.Id = cmd.Id
FirstName = cmd.FirstName
LastName = cmd.LastName
}