Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions frameworks/FSharp/falco/src/App/App.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="dapper" Version="2.1.66" />
<PackageReference Include="Falco" Version="5.*" />
<PackageReference Include="Npgsql" Version="9.*" />
</ItemGroup>
Expand Down
36 changes: 7 additions & 29 deletions frameworks/FSharp/falco/src/App/Program.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module Program

open System.Data
open Dapper
open Falco
open Falco.Markup
open Falco.Routing
Expand All @@ -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 [] [
Expand Down
Loading