diff --git a/lib/camp_api/grist/fundraising.ex b/lib/camp_api/grist/fundraising.ex new file mode 100644 index 0000000..1c14dba --- /dev/null +++ b/lib/camp_api/grist/fundraising.ex @@ -0,0 +1,14 @@ +defmodule CampApi.Grist.Fundraising do + @moduledoc false + + alias CampApi.Grist + + @gauge_doc "wWacvVWE9QtQ" + @gauge_table "Dons" + + def get() do + {:ok, %{body: %{"records" => records}}} = Grist.get_records(@gauge_doc, @gauge_table) + + records + end +end diff --git a/lib/camp_api_web/controllers/grist_controller.ex b/lib/camp_api_web/controllers/grist_controller.ex index 0e7323f..3637cdf 100644 --- a/lib/camp_api_web/controllers/grist_controller.ex +++ b/lib/camp_api_web/controllers/grist_controller.ex @@ -3,6 +3,7 @@ defmodule CampApiWeb.GristController do alias CampApi.Grist alias CampApi.Grist.Gauge + alias CampApi.Grist.Fundraising action_fallback CampApiWeb.FallbackController @@ -11,4 +12,10 @@ defmodule CampApiWeb.GristController do render(conn, :gauge, gauge: gauge) end + + def fundraising(conn, _params) do + fundraising = Fundraising.get() + + render(conn, :fundraising, fundraising: fundraising) + end end diff --git a/lib/camp_api_web/controllers/grist_json.ex b/lib/camp_api_web/controllers/grist_json.ex index 746a4f3..d87143f 100644 --- a/lib/camp_api_web/controllers/grist_json.ex +++ b/lib/camp_api_web/controllers/grist_json.ex @@ -4,4 +4,13 @@ defmodule CampApiWeb.GristJSON do def gauge(%{gauge: gauge}) do %{gauge: gauge} end + + def fundraising(%{fundraising: fundraising}) do + total = + fundraising + |> Enum.map(fn record -> get_in(record, ["fields", "Montant"]) end) + |> Enum.sum() + + %{total: total} + end end diff --git a/lib/camp_api_web/router.ex b/lib/camp_api_web/router.ex index bb1804e..d2f0653 100644 --- a/lib/camp_api_web/router.ex +++ b/lib/camp_api_web/router.ex @@ -9,6 +9,8 @@ defmodule CampApiWeb.Router do pipe_through :api get "/gauge", GristController, :gauge + + get "/fundraising", GristController, :fundraising end # Enable LiveDashboard in development