defmodule CodestatsAPI do
@moduledoc """
This module is responsible for handling the requests to the Code::Stats API.
"""
@doc """
Returns the user's data from the Code::Stats API.
## Examples
iex> {:ok, %CodestatsAPI.Stats{} = result} = CodestatsAPI.get_user_data("cbic")
iex> result.user
"cbic"
"""
@spec get_user_data(String.t()) ::
{:ok, CodestatsAPI.Stats.t()}
| {:error, :user_not_found}
| {:error, :something_went_wrong}
def get_user_data(username) do
url = "https://codestats.net/api/users/#{username}"
:ssl.start()
:application.start(:inets)
case :httpc.request(:get, {url, []}, [], []) do
{:ok, {{_version, 200, _reason_phrase}, _headers, body}} ->
{:ok, body |> to_string() |> JSON.decode!() |> CodestatsAPI.Stats.parse()}
{:ok, {{_version, 404, _reason_phrase}, _headers, _body}} ->
{:error, :user_not_found}
_ ->
{:error, :something_went_wrong}
end
end
end