Current section
Files
Jump to
Current section
Files
lib/tokenprocess.ex
defmodule Brawlex.TokenProcess do
use GenServer
@moduledoc false
@url_api "https://api.brawlstars.com/v1/"
def start_link(token_id) do
GenServer.start_link(__MODULE__, token_id)
end
@impl true
def init(token_id) do
headers = [
{"Accept", "application/json"},
{"authorization", "Bearer " <> token_id},
{"User-Agent", "Brawlex"}
]
{:ok, {token_id, headers}}
end
@impl true
def handle_call(:brawlers, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "brawlers", headers) |> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
@impl true
def handle_call({:brawler, id}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "brawlers/" <> id, headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_single(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
@impl true
def handle_call({:ranking_players, country_code}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "rankings/" <> country_code <> "/players", headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
@impl true
def handle_call({:ranking_clubs, country_code}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "rankings/" <> country_code <> "/clubs", headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
@impl true
def handle_call({:ranking_brawlers, country_code, brawler_id}, _from, {token_id, headers}) do
case Finch.build(
:get,
@url_api <> "rankings/" <> country_code <> "/brawlers/" <> brawler_id,
headers
)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:ranking_seasons, country_code}, _from, {token_id, headers}) do
case Finch.build(
:get,
@url_api <> "rankings/" <> country_code <> "/powerplay/seasons",
headers
)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:ranking_season, country_code, season_id}, _from, {token_id, headers}) do
case Finch.build(
:get,
@url_api <> "rankings/" <> country_code <> "/powerplay/seasons/" <> season_id,
headers
)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:club, club_tag}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "clubs/" <> club_tag, headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_single(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:club_members, club_tag}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "clubs/" <> club_tag <> "/members", headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:player, player_tag}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "players/" <> player_tag, headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_single(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
def handle_call({:player_battlelog, player_tag}, _from, {token_id, headers}) do
case Finch.build(:get, @url_api <> "players/" <> player_tag <> "/battlelog", headers)
|> Finch.request(BrawlerFinch) do
{:ok, response} ->
case Brawlex.Parse.get_multiple(response) do
{:ok, data} -> {:reply, {:ok, data}, {token_id, headers}}
{:error, reason} -> {:reply, {:error, reason}, {token_id, headers}}
end
any ->
{:reply, {:error, any}, {token_id, headers}}
end
end
@impl true
def handle_call(_msg, _from, token_id) do
{:noreply, token_id}
end
@impl true
def handle_cast(:close, token_id) do
Brawlex.BrawlBrain.close_connection(token_id)
{:stop, :normal, {}}
end
@impl true
def handle_cast(_msg, token_id) do
{:noreply, token_id}
end
end