fix admin_handler_tickets

This commit is contained in:
2026-05-24 22:18:48 +03:00
parent 6098039632
commit 0de375c499
+10 -21
View File
@@ -76,8 +76,12 @@ list_tickets(Req) ->
Filters = parse_ticket_filters(Req1), Filters = parse_ticket_filters(Req1),
Pagination = handler_utils:parse_pagination_params(Req1), Pagination = handler_utils:parse_pagination_params(Req1),
TicketsResult = case maps:get(status, Filters, undefined) of TicketsResult = case maps:get(status, Filters, undefined) of
undefined -> logic_ticket:list_tickets(AdminId); undefined ->
Status -> logic_ticket:list_tickets_by_status(AdminId, Status) logic_ticket:list_tickets(AdminId);
StatusBinary ->
%% ← Преобразуем binary в atom
StatusAtom = binary_to_existing_atom(StatusBinary, utf8),
logic_ticket:list_tickets_by_status(AdminId, StatusAtom)
end, end,
case TicketsResult of case TicketsResult of
Tickets when is_list(Tickets) -> Tickets when is_list(Tickets) ->
@@ -108,22 +112,15 @@ parse_ticket_filters(Req) ->
%% @private Дополнительная фильтрация (status, assigned_to, q). %% @private Дополнительная фильтрация (status, assigned_to, q).
-spec apply_ticket_filters([#ticket{}], map()) -> [#ticket{}]. -spec apply_ticket_filters([#ticket{}], map()) -> [#ticket{}].
apply_ticket_filters(Tickets, Filters) -> apply_ticket_filters(Tickets, Filters) ->
Status = maps:get(status, Filters, undefined),
Assigned = maps:get(assigned_to, Filters, undefined), Assigned = maps:get(assigned_to, Filters, undefined),
Q = maps:get(q, Filters, undefined), Q = maps:get(q, Filters, undefined),
F1 = case Status of F1 = case Assigned of
undefined -> Tickets; undefined -> Tickets;
_ -> [T || T <- Tickets, _ -> [T || T <- Tickets, T#ticket.assigned_to =:= Assigned]
normalize_status(T#ticket.status) =:= normalize_status(Status)]
end,
F2 = case Assigned of
undefined -> F1;
_ -> [T || T <- F1, T#ticket.assigned_to =:= Assigned]
end, end,
case Q of case Q of
undefined -> F2; undefined -> F1;
_ -> [T || T <- F2, _ -> [T || T <- F1, string:str(binary_to_list(T#ticket.error_message), binary_to_list(Q)) > 0]
string:str(binary_to_list(T#ticket.error_message), binary_to_list(Q)) > 0]
end. end.
%% @private Отсортировать тикеты согласно параметрам. %% @private Отсортировать тикеты согласно параметрам.
@@ -154,11 +151,3 @@ pagination_headers(#{limit := Limit, offset := Offset}, Total) ->
<<"x-total-count">> => integer_to_binary(Total), <<"x-total-count">> => integer_to_binary(Total),
<<"access-control-expose-headers">> => <<"Content-Range, X-Total-Count">> <<"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.