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