fix ticket stats
This commit is contained in:
@@ -105,18 +105,24 @@ parse_ticket_filters(Req) ->
|
||||
q => proplists:get_value(<<"q">>, Qs)
|
||||
}.
|
||||
|
||||
%% @private Дополнительная фильтрация (assigned_to, q).
|
||||
%% @private Дополнительная фильтрация (status, assigned_to, q).
|
||||
-spec apply_ticket_filters([#ticket{}], map()) -> [#ticket{}].
|
||||
apply_ticket_filters(Tickets, Filters) ->
|
||||
Status = maps:get(status, Filters, undefined),
|
||||
Assigned = maps:get(assigned_to, Filters, undefined),
|
||||
Q = maps:get(q, Filters, undefined),
|
||||
F1 = case Assigned of
|
||||
F1 = case Status of
|
||||
undefined -> Tickets;
|
||||
_ -> [T || T <- Tickets, T#ticket.assigned_to =:= Assigned]
|
||||
_ -> [T || T <- Tickets,
|
||||
normalize_status(T#ticket.status) =:= normalize_status(Status)]
|
||||
end,
|
||||
F2 = case Assigned of
|
||||
undefined -> F1;
|
||||
_ -> [T || T <- F1, T#ticket.assigned_to =:= Assigned]
|
||||
end,
|
||||
case Q of
|
||||
undefined -> F1;
|
||||
_ -> [T || T <- F1,
|
||||
undefined -> F2;
|
||||
_ -> [T || T <- F2,
|
||||
string:str(binary_to_list(T#ticket.error_message), binary_to_list(Q)) > 0]
|
||||
end.
|
||||
|
||||
@@ -147,4 +153,12 @@ pagination_headers(#{limit := Limit, offset := Offset}, Total) ->
|
||||
<<"content-range">> => iolist_to_binary(io_lib:format("items ~B-~B/~B", [Offset, RangeEnd, Total])),
|
||||
<<"x-total-count">> => integer_to_binary(Total),
|
||||
<<"access-control-expose-headers">> => <<"Content-Range, X-Total-Count">>
|
||||
}.
|
||||
}.
|
||||
|
||||
%% @private Нормализует статус: атом → атом, binary → атом.
|
||||
-spec normalize_status(atom() | binary()) -> atom().
|
||||
normalize_status(Status) when is_atom(Status) -> Status;
|
||||
normalize_status(Status) when is_binary(Status) ->
|
||||
try binary_to_existing_atom(Status, utf8)
|
||||
catch error:badarg -> Status
|
||||
end.
|
||||
Reference in New Issue
Block a user