diff --git a/lib/api/api_consultas/studies.ex b/lib/api/api_consultas/studies.ex index 137033b..0ad8604 100644 --- a/lib/api/api_consultas/studies.ex +++ b/lib/api/api_consultas/studies.ex @@ -1,6 +1,7 @@ defmodule Api.Studies do import Ecto.Query alias Api.Repo + require Logger def studies_sql_query(filters) do customfilter = @@ -9,7 +10,8 @@ defmodule Api.Studies do "" -> dynamic([_], true) expr -> case ExpressionParser.parse(expr) do - {:ok, ast} -> ExpressionToEcto.to_dynamic(ast) + {:ok, ast} -> + ExpressionToEcto.to_dynamic(ast) {:error, _reason} -> raise "Error al parsear customfilter" end end @@ -18,7 +20,9 @@ defmodule Api.Studies do size = filters["size"] || 24 filter = filters["filter"] || [] - sort = filters["sort"] || [%{"dir" => "desc", "field" => "studydate"}] + sort = filters["sort"] || [%{"dir" => "desc", "field" => "idstudy"}] + + Logger.info("sort -> #{inspect(sort)}") # Construcción de condiciones de filtro dinámicas filter_conditions = @@ -91,6 +95,8 @@ defmodule Api.Studies do {direction, field} end) + Logger.info("sort_conditions --> #{inspect(sort_conditions)}") + combined_filter = dynamic([q], ^filter_conditions and ^customfilter) diff --git a/lib/api/emailsender/contexts/emailstosendcontext.ex b/lib/api/emailsender/contexts/emailstosendcontext.ex index 9a95cac..152a1c9 100644 --- a/lib/api/emailsender/contexts/emailstosendcontext.ex +++ b/lib/api/emailsender/contexts/emailstosendcontext.ex @@ -141,7 +141,7 @@ defmodule Api.EmailToSendContext do end def get_next_email() do - one_day_ago = NaiveDateTime.utc_now() |> NaiveDateTime.add(-86400, :second) + # one_day_ago = NaiveDateTime.utc_now() |> NaiveDateTime.add(-86400, :second) from( e in Emailtosend, @@ -161,8 +161,8 @@ defmodule Api.EmailToSendContext do e.hasreport == true and e.sent != true and e.retries < 10 - ) - and e.registered >= ^one_day_ago, + ), + # and e.registered >= ^one_day_ago, limit: 1, select: %{ idemailtosend: e.idemailtosend, diff --git a/lib/api/parser/expression_to_ecto.ex b/lib/api/parser/expression_to_ecto.ex index 4618f82..680a8cb 100644 --- a/lib/api/parser/expression_to_ecto.ex +++ b/lib/api/parser/expression_to_ecto.ex @@ -48,11 +48,20 @@ defmodule ExpressionToEcto do end # IN - defp build_dynamic({:comparison, [{:field, field}, :in, {:list, vals}]}) do + defp build_dynamic({:comparison, [{:field, field}, :in, {:list, vals}]}) when is_list(vals) do field_atom = String.to_atom(field) - dynamic([q], field(q, ^field_atom) in ^vals) + + parsed_vals = + Enum.map(vals, fn + {:string, val} -> val + {:number, val} -> val + other -> raise "Tipo de dato no soportado en IN: #{inspect(other)}" + end) + + dynamic([q], field(q, ^field_atom) in ^parsed_vals) end + defp build_dynamic(other) do raise "AST no soportado o mal formado: #{inspect(other)}" end