1
1
namespace SqlStreamStore.FSharp
2
2
3
3
4
- open System
5
4
open Insurello.AsyncExtra
6
5
open SqlStreamStore
7
- open SqlStreamStore.FSharp
8
6
open SqlStreamStore.Streams
9
7
10
8
type MessageDetails =
@@ -18,29 +16,37 @@ and Id =
18
16
| Auto
19
17
20
18
module 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 > =
22
31
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
41
47
42
48
module AppendExtras =
43
- let appendNewMessage : IStreamStore -> StreamDetails -> MessageDetails -> AsyncResult < AppendResult , AppendException > =
49
+ let appendNewMessage : IStreamStore -> AppendStreamDetails -> MessageDetails -> AsyncResult < AppendResult , AppendException > =
44
50
fun store streamDetails messageDetails ->
45
51
Append.appendNewMessage store streamDetails messageDetails
46
52
|> Async.Catch
@@ -49,5 +55,8 @@ module AppendExtras =
49
55
| Choice2Of2 exn ->
50
56
Error
51
57
<| 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