|
@@ -1,6 +1,7 @@
|
|
|
module Program
|
|
|
|
|
|
open System.Data
|
|
|
+open Dapper
|
|
|
open Falco
|
|
|
open Falco.Markup
|
|
|
open Falco.Routing
|
|
@@ -26,38 +27,15 @@ type Fortune =
|
|
|
message = "Additional fortune added at request time." }
|
|
|
|
|
|
let handleFortunes (connStr : string) : HttpHandler = fun ctx -> task {
|
|
|
- use conn = new NpgsqlConnection(connStr)
|
|
|
-
|
|
|
- use comd = conn.CreateCommand()
|
|
|
- comd.CommandText <- "SELECT id, message FROM fortune"
|
|
|
-
|
|
|
- do! conn.OpenAsync()
|
|
|
- use! redr = comd.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
|
|
|
-
|
|
|
- let! dbFortunes =
|
|
|
- task {
|
|
|
- let mutable shouldContinue = true
|
|
|
- let fortunes = ResizeArray<Fortune>()
|
|
|
|
|
|
- while shouldContinue do
|
|
|
- let! fortunesRead = redr.ReadAsync()
|
|
|
-
|
|
|
- if not fortunesRead then
|
|
|
- shouldContinue <- false
|
|
|
- else
|
|
|
- fortunes.Add { id = redr.GetInt32(0)
|
|
|
- message = redr.GetString(1) }
|
|
|
- return fortunes |> List.ofSeq
|
|
|
- }
|
|
|
-
|
|
|
- redr.Dispose()
|
|
|
- comd.Dispose()
|
|
|
- conn.Dispose()
|
|
|
+ use conn = new NpgsqlConnection(connStr)
|
|
|
+ let! data = conn.QueryAsync<Fortune>("SELECT id, message FROM fortune")
|
|
|
+ let fortunes = data.AsList()
|
|
|
+ fortunes.Add(Fortune.Default)
|
|
|
|
|
|
let sortedFortunes =
|
|
|
- Fortune.Default ::
|
|
|
- dbFortunes
|
|
|
- |> List.sortBy (fun f -> f.message)
|
|
|
+ fortunes
|
|
|
+ |> Seq.sortBy (fun f -> f.message)
|
|
|
|
|
|
let html =
|
|
|
Elem.html [] [
|