From e77288d40e680ba12e75caacfbe38ae3595b2617 Mon Sep 17 00:00:00 2001 From: Mitchell Gerber Date: Mon, 1 Jan 2018 19:20:17 -0600 Subject: [PATCH] character list end point --- lib/myapp/battle_net/user.ex | 18 ++++++++++++++++-- .../controllers/battle_net_controller.ex | 15 +++++++++++++++ lib/myapp_web/router.ex | 3 +++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/myapp/battle_net/user.ex b/lib/myapp/battle_net/user.ex index 012f2c2..fdf898c 100644 --- a/lib/myapp/battle_net/user.ex +++ b/lib/myapp/battle_net/user.ex @@ -7,7 +7,9 @@ defmodule MyApp.BattleNet.User do # grab user information from battle net api - use token for auth @spec get_user(String.t | {atom, any}) :: {:ok, battle_net_user} | {:error, any} def get_user(access_token) when is_binary(access_token) do - HTTPoison.get(resource_url("account/user", access_token)) + access_token + |> resource_url("account/user") + |> HTTPoison.get |> parse_user_response(access_token) end def get_user({:ok, access_token}), do: get_user(access_token) @@ -26,7 +28,19 @@ defmodule MyApp.BattleNet.User do end end - defp resource_url(path, access_token) do + @spec get_user_characters(String.t) :: {:ok, map} | {:error, any} + def get_user_characters(access_token) do + access_token + |> resource_url("wow/user/characters") + |> HTTPoison.get + |> parse_character_response + end + + defp parse_character_response({:error, error}), do: {:error, error} + defp parse_character_response({:ok, %HTTPoison.Response{body: body}}), do: Poison.decode(body) + + defp resource_url(access_token, path) do "#{api_url()}/#{path}?access_token=#{access_token}" end + end diff --git a/lib/myapp_web/controllers/battle_net_controller.ex b/lib/myapp_web/controllers/battle_net_controller.ex index ab8327a..a2eac5d 100644 --- a/lib/myapp_web/controllers/battle_net_controller.ex +++ b/lib/myapp_web/controllers/battle_net_controller.ex @@ -22,4 +22,19 @@ defmodule MyAppWeb.BattleNetController do |>Response.json(output) end + # TODO: cache this end point + def characters(conn, _params) do + token = conn + |> MyApp.Guardian.Plug.current_claims + |> Map.get("access_token") + + {output, status} = token + |> BattleNet.User.get_user_characters + |> Response.put_resp + + conn + |>put_status(status) + |>Response.json(output) + end + end diff --git a/lib/myapp_web/router.ex b/lib/myapp_web/router.ex index 098f04f..1816458 100644 --- a/lib/myapp_web/router.ex +++ b/lib/myapp_web/router.ex @@ -16,6 +16,9 @@ defmodule MyAppWeb.Router do scope "/battlenet" do get "/authorize", BattleNetController, :authorize + + pipe_through [:api_auth] + get "/characters", BattleNetController, :characters end scope "/user" do