22/// Demonstrates how to use Fable.Python.FastAPI with decorator attributes
33module App
44
5+ open System.Threading .Tasks
56open Fable.Core
67open Fable.Python .FastAPI
78open Fable.Python .Pydantic
@@ -36,36 +37,42 @@ items.Add(item2)
3637type API () =
3738 /// Root endpoint - welcome message
3839 [<Get( " /" ) >]
39- static member root () : obj =
40- {| message = " Welcome to Fable.Python + FastAPI!"
40+ static member root () : Task < obj > = task {
41+ return {|
42+ message = " Welcome to Fable.Python + FastAPI!"
4143 version = " 1.0.0" |}
44+ }
4245
4346 /// Health check endpoint
4447 [<Get( " /health" ) >]
45- static member health () : obj =
46- {| status = " healthy"
48+ static member health () : Task < obj > = task {
49+ return {|
50+ status = " healthy"
4751 users_ count = users.Count
4852 items_ count = items.Count |}
53+ }
4954
5055 /// Get all users
5156 [<Get( " /users" ) >]
52- static member get_users () : ResizeArray < User > =
53- users
57+ static member get_users () : Task < ResizeArray < User >> = task {
58+ return users
59+ }
5460
5561 /// Get a user by ID
5662 [<Get( " /users/{user_id}" ) >]
57- static member get_user ( user_id : int ) : obj =
63+ static member get_user ( user_id : int ) : Task < obj > = task {
5864 match users |> Seq.tryFind ( fun u -> u.Id = user_ id) with
59- | Some user -> user :> obj
60- | None -> {| error = " User not found" |}
61-
65+ | Some user -> return user :> obj
66+ | None -> return {| error = " User not found" |}
67+ }
6268 /// Create a new user
6369 [<Post( " /users" ) >]
64- static member create_user ( request : CreateUserRequest ) : obj =
70+ static member create_user ( request : CreateUserRequest ) = task {
6571 let newId = if users.Count = 0 then 1 else ( users |> Seq.map ( fun u -> u.Id) |> Seq.max) + 1
6672 let newUser = User( Id = newId, Name = request.Name, Email = request.Email)
6773 users.Add( newUser)
68- {| status = " created" ; user = newUser |}
74+ return {| status = " created" ; user = newUser |}
75+ }
6976
7077 /// Get all items
7178 [<Get( " /items" ) >]
@@ -74,34 +81,38 @@ type API() =
7481
7582 /// Get an item by ID
7683 [<Get( " /items/{item_id}" ) >]
77- static member get_item ( item_id : int ) : obj =
84+ static member get_item ( item_id : int ) : Task < obj > = task {
7885 match items |> Seq.tryFind ( fun i -> i.Id = item_ id) with
79- | Some item -> item :> obj
80- | None -> {| error = " Item not found" |}
86+ | Some item -> return item :> obj
87+ | None -> return {| error = " Item not found" |}
88+ }
8189
8290 /// Create a new item
8391 [<Post( " /items" ) >]
84- static member create_item ( request : CreateItemRequest ) : obj =
92+ static member create_item ( request : CreateItemRequest ) : Task < obj > = task {
8593 let newId = if items.Count = 0 then 1 else ( items |> Seq.map ( fun i -> i.Id) |> Seq.max) + 1
8694 let newItem = Item( Id = newId, Name = request.Name, Price = request.Price, InStock = request.InStock)
8795 items.Add( newItem)
88- {| status = " created" ; item = newItem |}
96+ return {| status = " created" ; item = newItem |}
97+ }
8998
9099 /// Update an item
91100 [<Put( " /items/{item_id}" ) >]
92- static member update_item ( item_id : int , request : CreateItemRequest ) : obj =
101+ static member update_item ( item_id : int , request : CreateItemRequest ) : Task < obj > = task {
93102 match items |> Seq.tryFindIndex ( fun i -> i.Id = item_ id) with
94103 | Some index ->
95104 let updatedItem = Item( Id = item_ id, Name = request.Name, Price = request.Price, InStock = request.InStock)
96105 items.[ index] <- updatedItem
97- {| status = " updated" ; item = updatedItem |}
98- | None -> {| error = " Item not found" |}
106+ return {| status = " updated" ; item = updatedItem |}
107+ | None -> return {| error = " Item not found" |}
108+ }
99109
100110 /// Delete an item
101111 [<Delete( " /items/{item_id}" ) >]
102- static member delete_item ( item_id : int ) : obj =
112+ static member delete_item ( item_id : int ) : Task < obj > = task {
103113 match items |> Seq.tryFindIndex ( fun i -> i.Id = item_ id) with
104114 | Some index ->
105115 items.RemoveAt( index)
106- {| status = " deleted" ; deleted_ id = nativeint item_ id |}
107- | None -> {| error = " Item not found" |}
116+ return {| status = " deleted" ; deleted_ id = nativeint item_ id |}
117+ | None -> return {| error = " Item not found" |}
118+ }
0 commit comments