fsharp(todolist-api): feat: a route to create new todos
Signed-off-by: prescientmoon <git@moonythm.dev>
This commit is contained in:
parent
5b0365ed44
commit
534ee1594a
|
@ -6,8 +6,8 @@ DROP TABLE IF EXISTS "todos" CASCADE;
|
|||
|
||||
CREATE TABLE "todos" (
|
||||
"id" SERIAL PRIMARY KEY NOT NULL,
|
||||
"name" varchar(120) NULL,
|
||||
"description" varchar(4000) NULL);
|
||||
"name" varchar(120),
|
||||
"description" varchar(4000));
|
||||
|
||||
INSERT INTO "todos" ("name", "description") VALUES ('Example', 'I wonder if you are reading this.');
|
||||
|
||||
|
|
|
@ -70,6 +70,14 @@ module App =
|
|||
|> Json.format
|
||||
|> OK
|
||||
|
||||
let createTodo ctx = async {
|
||||
let dbContext = Context.getContext()
|
||||
let details: Types.TodoDetails = ctx.request.rawForm |> parseJson
|
||||
|
||||
let! todo = Queries.createTodo details dbContext
|
||||
|
||||
return! respondWithTodo todo ctx
|
||||
}
|
||||
|
||||
let mainWebPart: WebPart = choose [
|
||||
pathScan "/todos/%i" (fun (id) -> choose [
|
||||
|
@ -80,6 +88,7 @@ module App =
|
|||
])
|
||||
path "/todos/" >=> choose [
|
||||
GET >=> warbler listTodos
|
||||
POST >=> createTodo
|
||||
]]
|
||||
|
||||
[<EntryPoint>]
|
||||
|
|
|
@ -103,3 +103,13 @@ module Queries =
|
|||
todo.Delete()
|
||||
|
||||
ctx.SubmitUpdatesAsync()
|
||||
|
||||
let createTodo (details: TodoDetails) (ctx: DbContext) =
|
||||
async {
|
||||
let todo = ctx.Public.Todos.Create()
|
||||
|
||||
do! updateTodoById todo details ctx
|
||||
|
||||
return todo
|
||||
}
|
||||
|
Loading…
Reference in a new issue