defmodule Arpas.REST.Esri.Query do
alias Arpas.REST.Esri.Permesso
alias Cape.Utilita, as: Ut
alias Cape.Generico, as: Gen
def take_x_features, do: MapSet.new([:token, :sortby, :where, :outfields, :f])
def take_x_info, do: MapSet.new([:token, :f])
def tipo, do: MapSet.new([:feature_info, :feature_table])
defstruct [
:url,
:token,
:info_token,
:sortby,
where: "1=1",
outfields: "*",
f: "json",
feature: "",
user: :no_token,
tipo: :feature_info
]
def make_url(:feature_info, esri_query) do
take = take_x_info()
make_url(esri_query, take)
end
def make_url(:feature_table, esri_query) do
take = take_x_features()
make_url(esri_query, take)
end
def make_url(esri_query, take_what) do
numero = esri_query.feature
esri_map =
esri_query
|> Ut.struct2map_no_nil()
|> Ut.filtra_solo(take_what)
add_feature_num =
case numero do
"" ->
""
altro ->
altro <> "/" <> "query"
end
my_uri = URI.parse(esri_query.url <> add_feature_num)
URI.append_query(my_uri, URI.encode_query(esri_map))
|> URI.to_string()
end
def encode_query(esri_query) do
Ut.encode_query(esri_query)
end
def merge_token(esri_query, tk) do
token = Map.get(tk, "access_token")
esri_query = %{esri_query | token: token}
esri_query
end
def add_token(esri_query, user \\ :no_token) do
case user do
:no_token ->
esri_query
:alai ->
merge_token(esri_query, Permesso.token(user))
:idro ->
merge_token(esri_query, Permesso.token(user))
_user ->
esri_query
end
end
def url_test do
{:ok, contenuto} = File.read(Path.expand("secret_esri_feature.txt"))
contenuto
end
def dammi(query) do
tipo = query.tipo
new_query =
case query.user do
:no_token ->
query
user ->
query
|> add_token(user)
end
url = make_url(tipo, new_query)
{:ok, dato} = Gen.get(url)
dato
end
def info, do: dammi(%Arpas.REST.Esri.Query{url: url_test(), tipo: :feature_info})
def tab1, do: dammi(%Arpas.REST.Esri.Query{url: url_test(), tipo: :feature_table, feature: "0"})
end