From fc73f30dd06f3a386d195dbbee909734dcfad162 Mon Sep 17 00:00:00 2001 From: Joao P Dubas <joao.dubas@gmail.com> Date: Tue, 22 Jun 2021 01:56:14 +0000 Subject: [PATCH] [day-01] setup imc calc and route --- lib/wabanex/imc.ex | 32 +++++++++++++++++++ lib/wabanex_web/controllers/imc_controller.ex | 20 ++++++++++++ lib/wabanex_web/router.ex | 2 ++ students.csv | 5 +++ 4 files changed, 59 insertions(+) create mode 100644 lib/wabanex/imc.ex create mode 100644 lib/wabanex_web/controllers/imc_controller.ex create mode 100644 students.csv diff --git a/lib/wabanex/imc.ex b/lib/wabanex/imc.ex new file mode 100644 index 0000000..ef14632 --- /dev/null +++ b/lib/wabanex/imc.ex @@ -0,0 +1,32 @@ +defmodule Wabanex.IMC do + def calculate(%{"filename" => filename}) do + filename + |> File.read() + |> handle_file() + end + + defp handle_file({:ok, content}) do + data = + content + |> String.trim() + |> String.split("\n") + |> Enum.map(&parse_line/1) + |> Enum.into(%{}) + + {:ok, data} + end + + defp handle_file({:error, _reason}) do + {:error, "Error while opening the file"} + end + + defp parse_line(line) do + line + |> String.split(",") + |> List.update_at(1, &String.to_float/1) + |> List.update_at(2, &String.to_float/1) + |> calculate_imc() + end + + defp calculate_imc([name, height, weight]), do: {name, weight / :math.pow(height / 100, 2)} +end diff --git a/lib/wabanex_web/controllers/imc_controller.ex b/lib/wabanex_web/controllers/imc_controller.ex new file mode 100644 index 0000000..8defa75 --- /dev/null +++ b/lib/wabanex_web/controllers/imc_controller.ex @@ -0,0 +1,20 @@ +defmodule WabanexWeb.IMCController do + use WabanexWeb, :controller + + alias Wabanex.IMC + + def index(conn, params) do + params + |> IMC.calculate() + |> handle_response(conn) + end + + def handle_response({:ok, result}, conn), do: render_response(conn, :ok, result) + def handle_response({:error, result}, conn), do: render_response(conn, :bad_request, result) + + defp render_response(conn, status, result) do + conn + |> put_status(status) + |> json(%{result: result}) + end +end diff --git a/lib/wabanex_web/router.ex b/lib/wabanex_web/router.ex index 8804679..4608f2b 100644 --- a/lib/wabanex_web/router.ex +++ b/lib/wabanex_web/router.ex @@ -7,6 +7,8 @@ defmodule WabanexWeb.Router do scope "/api", WabanexWeb do pipe_through :api + + get "/", IMCController, :index end # Enables LiveDashboard only for development diff --git a/students.csv b/students.csv new file mode 100644 index 0000000..162f5b0 --- /dev/null +++ b/students.csv @@ -0,0 +1,5 @@ +João,168.0,90.0 +Claudio,172.0,90.0 +Americo,169.0,70.0 +Ana,165.0,58.0 +Luiz,180.0,90.0