on master help sign in
Use Dapper.FSharp DSL for outbox database operations
611d819iko
client/Store.fs+28−6
@@ -83,6 +83,7 @@ module Store =
83 let private contactTable = table'<ContactRow> "contacts"
83 let private contactTable = table'<ContactRow> "contacts"
84 let private messageTable = table'<MessageRow> "messages"
84 let private messageTable = table'<MessageRow> "messages"
85 let private settingsTable = table'<SettingsRow> "settings"
85 let private settingsTable = table'<SettingsRow> "settings"
86+ let private outboxTable = table'<OutboxRow> "outbox"
86
87
87 let private appDataDir =
88 let private appDataDir =
88 let baseDir =
89 let baseDir =
@@ -265,17 +266,38 @@ module Store =
265
266
266 let enqueueOutbox (recipientHex: string) (envelopeJson: string) =
267 let enqueueOutbox (recipientHex: string) (envelopeJson: string) =
267 use conn = openConn ()
268 use conn = openConn ()
268− conn.Execute(
269+ insert {
269− "INSERT INTO outbox (RecipientHex, EnvelopeJson, CreatedAt) VALUES (@RecipientHex, @EnvelopeJson, @CreatedAt)",
270+ for o in outboxTable do
271+ value
272+ { Id = 0L
270− {| RecipientHex = recipientHex; EnvelopeJson = envelopeJson
273+ RecipientHex = recipientHex
274+ EnvelopeJson = envelopeJson
271− CreatedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() |})
275+ CreatedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }
276+ excludeColumn o.Id
277+ }
278+ |> conn.InsertAsync
279+ |> Async.AwaitTask
280+ |> Async.RunSynchronously
272 |> ignore
281 |> ignore
273
282
274 let peekOutbox () : OutboxRow option =
283 let peekOutbox () : OutboxRow option =
275 use conn = openConn ()
284 use conn = openConn ()
276− conn.Query<OutboxRow>("SELECT Id, RecipientHex, EnvelopeJson, CreatedAt FROM outbox ORDER BY Id LIMIT 1")
285+ select {
286+ for o in outboxTable do
287+ orderBy o.Id
288+ }
289+ |> conn.SelectAsync<OutboxRow>
290+ |> Async.AwaitTask
291+ |> Async.RunSynchronously
277 |> Seq.tryHead
292 |> Seq.tryHead
278
293
279 let dequeueOutbox (id: int64) =
294 let dequeueOutbox (id: int64) =
280 use conn = openConn ()
295 use conn = openConn ()
281− conn.Execute("DELETE FROM outbox WHERE Id = @Id", {| Id = id |}) |> ignore
296+ delete {
297+ for o in outboxTable do
298+ where (o.Id = id)
299+ }
300+ |> conn.DeleteAsync
301+ |> Async.AwaitTask
302+ |> Async.RunSynchronously
303+ |> ignore