Current section

Files

Jump to
tehama_client_ex lib tehama_client tehama_client_api.ex
Raw

lib/tehama_client/tehama_client_api.ex

defmodule TehamaClientApi do
@moduledoc false
require Logger
def auth("username", "password") do
{:ok, %TehamaClient.Auth{token: "testtoken"}}
end
@spec auth(any, any) :: {:error, any} | {:ok, %TehamaClient.Auth{token: String.t()}}
def auth(username, password) do
case TehamaClientHTTP.post_without_auth(
"/auth/login",
%{username: username, password: password}
) do
{:ok, %{body: body, status_code: 200}} ->
{:ok, %TehamaClient.Auth{token: body.token}}
{:ok, %{body: error, status_code: code}} ->
Logger.warn("Error getting auth: #{inspect(error)} (#{code})")
{:error, error}
other ->
Logger.warn("other error: #{inspect(other)}")
{:error, other}
end
end
def site("88471391331") do
%TehamaClient.Site{access_code: "88471391331"}
end
@spec site(String.t()) :: %TehamaClient.Site{access_code: String.t()}
def site(access_code) do
%TehamaClient.Site{
access_code: access_code
}
end
def site_list(%TehamaClient.Auth{token: "testtoken"}) do
[
TehamaClient.MockData.site()
]
end
def site_list(%TehamaClient.Auth{token: token}) do
case TehamaClientHTTP.get_with_auth("/tehama/site-list-server", token) do
{:ok, json} ->
with data <- json.data do
with sites <- data["sites"] do
sites |> Enum.map(&TehamaClient.Site.new/1)
end
end
{:error, error} ->
error
end
end
def units(%TehamaClient.Auth{token: "testtoken"}, _) do
[
TehamaClient.MockData.unit()
]
end
def units(%TehamaClient.Auth{} = auth, %TehamaClient.Site{} = site) do
report_data(auth, site)
|> Enum.group_by(fn %TehamaClient.Device{apt: apt} ->
apt
end)
|> Enum.map(fn {_apt, devices} ->
TehamaClient.Unit.from_devices(devices)
end)
end
def report_data(%TehamaClient.Auth{token: "testtoken"}, _) do
[
TehamaClient.MockData.report_data()
]
end
@spec report_data(TehamaClient.Auth.t(), TehamaClient.Site.t()) :: any
def report_data(%TehamaClient.Auth{} = auth, %TehamaClient.Site{} = site) do
report_data(auth, site, nil, nil)
end
def report_data(
%TehamaClient.Auth{token: token},
%TehamaClient.Site{access_code: access_code},
start_time,
end_time
) do
get_report_data_results(report_url(access_code, start_time, end_time), token)
end
def report_url(access_code, %Date{} = start_time, %Date{} = end_time) do
start_time_str = start_time |> Calendar.strftime("%Y-%m-%dT0001")
end_time_str = end_time |> Calendar.strftime("%Y-%m-%dT2359")
"/tehama/sites/report-data/#{access_code}?start_time=#{start_time_str}&end_time=#{end_time_str}"
end
def report_url(access_code, _, _) do
"/tehama/sites/report-data/#{access_code}"
end
defp get_report_data_results(_, "testtoken") do
[
TehamaClient.MockData.report_data()
]
end
defp get_report_data_results(url, token) do
case TehamaClientHTTP.get_with_auth(url, token) do
{:ok, json} ->
with data <- json.data do
with devices <- data["devices"] do
devices |> Enum.map(&TehamaClient.Device.new/1)
end
end
{:error, error} ->
error
end
end
end