diff options
author | Mateus Cruz <mateuscolvr@gmail.com> | 2024-02-05 11:06:46 -0300 |
---|---|---|
committer | Mateus Cruz <mateuscolvr@gmail.com> | 2024-02-05 11:06:46 -0300 |
commit | 8878b1d92bdd8ee9b51ecde7e9cc88f62f264841 (patch) | |
tree | 46d6c47dfc820689baa552d97255adeda4c98b15 /lib/router.ml | |
parent | 5a2f5bf9a12b270e15757df48afeb1c1db5b34b3 (diff) |
move routes handler module to its own file
Diffstat (limited to 'lib/router.ml')
-rw-r--r-- | lib/router.ml | 49 |
1 files changed, 2 insertions, 47 deletions
diff --git a/lib/router.ml b/lib/router.ml index 35cef34..4572978 100644 --- a/lib/router.ml +++ b/lib/router.ml @@ -1,5 +1,3 @@ -[@@@warning "-26-27-32"] - open StdLabels open Routes open Piaf @@ -14,55 +12,12 @@ module R = Map.Make (struct ;; end) -module Handler = struct - let transaction client_id (db_pool : Query.pool) (request : Request.t) = - let client_opt = - Option.join @@ Result.to_option @@ Query.find_client client_id db_pool - in - match client_opt with - | Some client -> - let insert_result = - let body = Result.to_option @@ Body.to_string request.body in - let json = Option.map Yojson.Safe.from_string body in - let decoded_op = Option.bind json (Utils.Decoder.decode Operation.decoder) in - match decoded_op with - | Some op -> - (match Query.execute_operation ~client_id ~op db_pool with - | Ok _ as ok -> ok - | Error e -> Error (`DB e)) - | None -> Error (`Decoder "Invalid operation") - in - (match insert_result with - | Ok () -> - let json : Yojson.Safe.t = - `Assoc [ "limite", `Int 100000; "saldo", `Int (-9098) ] - in - Response.of_string ~body:(Yojson.Safe.to_string json) `OK - | Error _ -> Response.create (`Code 422)) - | None -> Response.create `Not_found - ;; - - let balance client_id (db_pool : Query.pool) (request : Request.t) = - let json : Yojson.Safe.t = - let balance = - let total = `Int (-9098) in - let date = `String "2024-01-17T02:34:41.217753Z" in - let limit = `Int 100000 in - `Assoc [ "total", total; "data_extrato", date; "limite", limit ] - in - let last_transactions = `List [] in - `Assoc [ "saldo", balance; "ultimas_transacoes", last_transactions ] - in - Response.of_string ~body:(Yojson.Safe.to_string json) `OK - ;; -end - let routes = List.fold_left ~f:(fun acc (v, r) -> R.add_to_list v r acc) ~init:R.empty - [ `GET, (s "clientes" / int / s "extrato" /? nil) @--> Handler.balance - ; `POST, (s "clientes" / int / s "transacoes" /? nil) @--> Handler.transaction + [ `GET, (s "clientes" / int / s "extrato" /? nil) @--> Handler.get_balance + ; `POST, (s "clientes" / int / s "transacoes" /? nil) @--> Handler.create_transaction ] ;; |