fsharp(todolist-api): feat: todo listing
Signed-off-by: prescientmoon <git@moonythm.dev>
This commit is contained in:
parent
886d8be8bb
commit
5b0365ed44
|
@ -1,6 +1,6 @@
|
||||||
// Learn more about F# at http://fsharp.org
|
// Learn more about F# at http://fsharp.org
|
||||||
open System
|
open System
|
||||||
|
open FSharpPlus.Operators
|
||||||
open Suave
|
open Suave
|
||||||
open Suave.Operators
|
open Suave.Operators
|
||||||
open Suave.Successful
|
open Suave.Successful
|
||||||
|
@ -62,13 +62,25 @@ module App =
|
||||||
return! respondWithTodo todo ctx
|
return! respondWithTodo todo ctx
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let listTodos _ =
|
||||||
|
Context.getContext()
|
||||||
|
|> Queries.getAllTodos
|
||||||
|
|>> todoToRecord
|
||||||
|
|> Json.serialize
|
||||||
|
|> Json.format
|
||||||
|
|> OK
|
||||||
|
|
||||||
|
|
||||||
let mainWebPart: WebPart = choose [
|
let mainWebPart: WebPart = choose [
|
||||||
pathScan "/todos/%i" (fun (id) -> choose [
|
pathScan "/todos/%i" (fun (id) -> choose [
|
||||||
GET >=> todoById id
|
GET >=> todoById id
|
||||||
PUT >=> updateTodo id
|
PUT >=> updateTodo id
|
||||||
PATCH >=> patchTodo id
|
PATCH >=> patchTodo id
|
||||||
DELETE >=> deleteTodo id
|
DELETE >=> deleteTodo id
|
||||||
])]
|
])
|
||||||
|
path "/todos/" >=> choose [
|
||||||
|
GET >=> warbler listTodos
|
||||||
|
]]
|
||||||
|
|
||||||
[<EntryPoint>]
|
[<EntryPoint>]
|
||||||
let main _ =
|
let main _ =
|
||||||
|
|
|
@ -78,6 +78,12 @@ module Queries =
|
||||||
}
|
}
|
||||||
|> Seq.tryHead
|
|> Seq.tryHead
|
||||||
|
|
||||||
|
let getAllTodos (ctx: DbContext): DbTodo list =
|
||||||
|
query {
|
||||||
|
for todo in ctx.Public.Todos do
|
||||||
|
select todo
|
||||||
|
}
|
||||||
|
|> Seq.toList
|
||||||
|
|
||||||
let updateTodoById (todo: DbTodo) (details: TodoDetails) (ctx: DbContext) =
|
let updateTodoById (todo: DbTodo) (details: TodoDetails) (ctx: DbContext) =
|
||||||
todo.Name <- details.name
|
todo.Name <- details.name
|
||||||
|
|
Loading…
Reference in a new issue