fix: only add search filters present in QS so empty GET hits discovery tops. Refs EventHub/EventHubBack#50
CI / test (push) Successful in 6m58s
CI / deploy-ift (push) Successful in 3m16s
CI / e2e-ift (push) Failing after 1m30s
CI / deploy-stage (push) Has been skipped
CI / e2e-stage (push) Has been skipped

This commit is contained in:
2026-07-20 14:04:56 +03:00
parent 6d52bc3a8e
commit fc38f63497
+29 -15
View File
@@ -101,28 +101,42 @@ search(Req) ->
%%%=================================================================== %%%===================================================================
%% @private Собирает карту параметров для поискового движка. %% @private Собирает карту параметров для поискового движка.
%% Не кладёт sort/tags/geo/даты, если их нет в QS — иначе
%% logic_search:is_discovery_request/2 никогда не сработает (Back#50).
-spec parse_params(cowboy_req:qs()) -> map(). -spec parse_params(cowboy_req:qs()) -> map().
parse_params(Qs) -> parse_params(Qs) ->
Params = #{ Params0 = #{
limit => parse_int_param(Qs, <<"limit">>, 20), limit => parse_int_param(Qs, <<"limit">>, 20),
offset => parse_int_param(Qs, <<"offset">>, 0), offset => parse_int_param(Qs, <<"offset">>, 0)
tags => proplists:get_value(<<"tags">>, Qs),
sort => proplists:get_value(<<"sort">>, Qs, <<"start_time">>),
order => proplists:get_value(<<"order">>, Qs, <<"asc">>)
}, },
Params1 = case {parse_float_param(Qs, <<"lat">>), parse_float_param(Qs, <<"lon">>)} of Params1 = case proplists:get_value(<<"tags">>, Qs) of
undefined -> Params0;
<<>> -> Params0;
Tags -> Params0#{tags => Tags}
end,
Params2 = case proplists:get_value(<<"sort">>, Qs) of
undefined -> Params1;
<<>> -> Params1;
Sort ->
Order = case proplists:get_value(<<"order">>, Qs) of
undefined -> <<"asc">>;
<<>> -> <<"asc">>;
O -> O
end,
Params1#{sort => Sort, order => Order}
end,
Params3 = case {parse_float_param(Qs, <<"lat">>), parse_float_param(Qs, <<"lon">>)} of
{{ok, Lat}, {ok, Lon}} -> {{ok, Lat}, {ok, Lon}} ->
Radius = parse_int_param(Qs, <<"radius">>, 10), Radius = parse_int_param(Qs, <<"radius">>, 10),
Params#{lat => Lat, lon => Lon, radius => Radius}; Params2#{lat => Lat, lon => Lon, radius => Radius};
_ -> Params _ -> Params2
end, end,
Params2 = case {parse_datetime_param(Qs, <<"from">>), parse_datetime_param(Qs, <<"to">>)} of case {parse_datetime_param(Qs, <<"from">>), parse_datetime_param(Qs, <<"to">>)} of
{{ok, From}, {ok, To}} -> Params1#{from => From, to => To}; {{ok, From}, {ok, To}} -> Params3#{from => From, to => To};
{{ok, From}, error} -> Params1#{from => From}; {{ok, From}, error} -> Params3#{from => From};
{error, {ok, To}} -> Params1#{to => To}; {error, {ok, To}} -> Params3#{to => To};
_ -> Params1 _ -> Params3
end, end.
Params2.
-spec parse_int_param(cowboy_req:qs(), binary(), integer()) -> integer(). -spec parse_int_param(cowboy_req:qs(), binary(), integer()) -> integer().
parse_int_param(Qs, Key, Default) -> parse_int_param(Qs, Key, Default) ->