defmodule ProviderService.Queries.ProviderQueries do alias ProviderService.Projections.Provider alias ProviderService.Repo def list_providers(params \\ %{}) do Flop.validate_and_run(Provider, params, for: Provider) end def get_provider(provider_id) do case Repo.get(Provider, provider_id) do nil -> {:error, :not_found} provider -> {:ok, provider} end end def get_active_template(provider_id, policy_type) do with {:ok, provider} <- get_provider(provider_id) do default_id = Map.get(provider.default_templates, policy_type) templates = Map.get(provider.templates, policy_type, []) result = if default_id do Enum.find(templates, &(&1["template_id"] == default_id)) else Enum.find(templates, &(&1["active"] == true)) end case result do nil -> {:error, :no_active_template} template -> {:ok, template} end end end end