1module Complete.Example where
5import Data.Array (length)
6import Justifill (justifill)
7import Effect.Class.Console (log)
8import Yoga.Fetch.Om (GET, POST, PUT, DELETE, Route, JSON, type (/), type (:), type (:?), client)
9import Yoga.HTTP.API.Route (BearerToken(..))
10import Yoga.Om (Om, handleErrors)
18type CreateUserRequest =
23type UpdateUserRequest =
34 Route GET ("users" / "id" : Int)
36 ( ok :: { body :: User }
37 , notFound :: { body :: ErrorMessage }
40 Route GET ("users" :? { limit :: Int, offset :: Int })
42 ( ok :: { body :: Array User }
46 { body :: JSON CreateUserRequest }
47 ( created :: { body :: User }
48 , badRequest :: { body :: ErrorMessage }
51 Route PUT ("users" / "id" : Int)
52 { body :: JSON UpdateUserRequest }
53 ( ok :: { body :: User }
54 , notFound :: { body :: ErrorMessage }
55 , badRequest :: { body :: ErrorMessage }
58 Route DELETE ("users" / "id" : Int)
61 , notFound :: { body :: ErrorMessage }
65 { headers :: Record (authorization :: BearerToken), body :: JSON CreateUserRequest }
66 ( created :: { body :: User }
67 , badRequest :: { body :: ErrorMessage }
71api = client @UserAPI "https://api.example.com"
73exampleGetUser :: Om {} (notFound :: ErrorMessage) Unit
75 user <- api.getUser { id: 42 }
76 log $ "Found user: " <> user.name <> " (" <> user.email <> ")"
78exampleGetUserHandled :: Om {} () Unit
79exampleGetUserHandled = do
80 user <- api.getUser { id: 42 }
82 { notFound: \err -> ado
83 log $ "User not found: " <> err.error
84 in { id: 0, name: "unknown", email: "" }
86 log $ "Found user: " <> user.name
88exampleListUsers :: Om {} () Unit
90 users <- api.listUsers (justifill { limit: 10, offset: 0 })
91 log $ "Found " <> show (length users) <> " users"
93exampleCreateUser :: Om {} (badRequest :: ErrorMessage) Unit
95 user <- api.createUser
97 , email: "alice@example.com"
99 log $ "Created user with ID: " <> show user.id
101exampleUpdateUser :: Om {} (notFound :: ErrorMessage, badRequest :: ErrorMessage) Unit
102exampleUpdateUser = do
103 user <- api.updateUser
105 { name: "Alice Updated"
106 , email: "alice.new@example.com"
108 log $ "Updated user: " <> user.name
110exampleDeleteUser :: Om {} (notFound :: ErrorMessage) Unit
111exampleDeleteUser = do
112 _ <- api.deleteUser { id: 42 }
113 log "User deleted successfully"
115exampleCreateUserAuth :: Om {} (badRequest :: ErrorMessage) Unit
116exampleCreateUserAuth = do
117 user <- api.createUserAuth { authorization: BearerToken "abc123" }
119 , email: "alice@example.com"
121 log $ "Created user with ID: " <> show user.id
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list