11namespace SqlStreamStore.FSharp
22
33
4- open System
54open Insurello.AsyncExtra
65open SqlStreamStore
7- open SqlStreamStore.FSharp
86open SqlStreamStore.Streams
97
108type MessageDetails =
@@ -18,29 +16,37 @@ and Id =
1816 | Auto
1917
2018module Append =
21- let appendNewMessage : IStreamStore -> StreamDetails -> MessageDetails -> Async < AppendResult > =
19+ let private stringIdToGuid : Id -> System.Guid =
20+ function
21+ | Custom guid -> guid
22+ | Auto -> System.Guid.NewGuid()
23+
24+ let private newStreamMessageFromMessageDetails : MessageDetails -> NewStreamMessage =
25+ fun msg ->
26+ match msg.jsonMetadata with
27+ | " " -> NewStreamMessage( stringIdToGuid msg.id, msg.type_, msg.jsonData)
28+ | metadata -> NewStreamMessage( stringIdToGuid msg.id, msg.type_, msg.jsonData, metadata)
29+
30+ let appendNewMessage : IStreamStore -> AppendStreamDetails -> MessageDetails -> Async < AppendResult > =
2231 fun store streamDetails messageDetails ->
23- let toId : Id -> System.Guid =
24- function
25- | Custom guid -> guid
26- | Auto -> System.Guid.NewGuid()
27-
28- let createMessage : MessageDetails -> NewStreamMessage =
29- fun msg ->
30- match msg.jsonMetadata with
31- | " " -> NewStreamMessage( toId msg.id, msg.type_, msg.jsonData)
32- | metadata -> NewStreamMessage( toId msg.id, msg.type_, msg.jsonData, metadata)
33-
34- let append : IStreamStore -> StreamDetails -> MessageDetails -> Async < AppendResult > =
35- fun store streamDetails messageDetails ->
36- store.AppendToStream
37- ( streamDetails.streamName, Helpers.toVersion streamDetails.version, createMessage messageDetails)
38- |> Async.AwaitTask
39-
40- append store streamDetails messageDetails
32+ store.AppendToStream
33+ ( StreamId( streamDetails.streamName),
34+ Helpers.getVersion streamDetails.version,
35+ [| newStreamMessageFromMessageDetails messageDetails |])
36+ |> Async.AwaitTask
37+
38+ let appendNewMessages : IStreamStore -> AppendStreamDetails -> List < MessageDetails > -> Async < AppendResult > =
39+ fun store streamDetails messages ->
40+ store.AppendToStream
41+ ( StreamId( streamDetails.streamName),
42+ Helpers.getVersion streamDetails.version,
43+ messages
44+ |> List.map newStreamMessageFromMessageDetails
45+ |> List.toArray)
46+ |> Async.AwaitTask
4147
4248module AppendExtras =
43- let appendNewMessage : IStreamStore -> StreamDetails -> MessageDetails -> AsyncResult < AppendResult , AppendException > =
49+ let appendNewMessage : IStreamStore -> AppendStreamDetails -> MessageDetails -> AsyncResult < AppendResult , AppendException > =
4450 fun store streamDetails messageDetails ->
4551 Append.appendNewMessage store streamDetails messageDetails
4652 |> Async.Catch
@@ -49,5 +55,8 @@ module AppendExtras =
4955 | Choice2Of2 exn ->
5056 Error
5157 <| match exn with
52- | :? AggregateException as exn -> exn.InnerException |> AppendException.WrongExpectedVersion
53- | _ as exn -> exn |> AppendException.Other)
58+ // TODO: make sense
59+ | :? System.AggregateException as exn ->
60+ exn.InnerException
61+ |> AppendException.WrongExpectedVersion
62+ | exn -> exn |> AppendException.Other)
0 commit comments