-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNoCQS.fs
31 lines (29 loc) · 846 Bytes
/
NoCQS.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
module NoCQS
open Equinox
open FsCodec
open FsCodec.NewtonsoftJson
open Serilog
open TypeShape
open CardOverflow.Pure
open CardOverflow.Api
open FsToolkit.ErrorHandling
open Domain
open Infrastructure
open FSharp.UMX
open CardOverflow.Pure.AsyncOp
open System
open NodaTime
open EventAppender
open FSharp.Control.Tasks
type User (appender: UserSaga.Appender, keyValueStore: KeyValueStore) =
member _.getsert meta displayName = task {
let! summary = keyValueStore.TryGet<Summary.User> meta.UserId
return!
match summary with
| Some (s, _) -> s |> Ok |> Async.singleton
| None -> asyncResult {
let signedUp = appender.BuildSignedUp meta displayName
do! appender.Create signedUp
return User.Fold.evolveSignedUp signedUp
}
}