From 0de375c4995ee70befce567db7c98302ff56f1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B0?= =?UTF-8?q?=D0=B1=D0=B8=D0=BB=D0=B8=D0=BD?= Date: Sun, 24 May 2026 22:18:48 +0300 Subject: [PATCH] fix admin_handler_tickets --- src/handlers/admin/admin_handler_tickets.erl | 35 +++++++------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/handlers/admin/admin_handler_tickets.erl b/src/handlers/admin/admin_handler_tickets.erl index b8356fc..afae26d 100644 --- a/src/handlers/admin/admin_handler_tickets.erl +++ b/src/handlers/admin/admin_handler_tickets.erl @@ -76,9 +76,13 @@ list_tickets(Req) -> Filters = parse_ticket_filters(Req1), Pagination = handler_utils:parse_pagination_params(Req1), TicketsResult = case maps:get(status, Filters, undefined) of - undefined -> logic_ticket:list_tickets(AdminId); - Status -> logic_ticket:list_tickets_by_status(AdminId, Status) - end, + undefined -> + logic_ticket:list_tickets(AdminId); + StatusBinary -> + %% ← Преобразуем binary в atom + StatusAtom = binary_to_existing_atom(StatusBinary, utf8), + logic_ticket:list_tickets_by_status(AdminId, StatusAtom) + end, case TicketsResult of Tickets when is_list(Tickets) -> Filtered = apply_ticket_filters(Tickets, Filters), @@ -108,22 +112,15 @@ parse_ticket_filters(Req) -> %% @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 Status of + F1 = case Assigned of undefined -> Tickets; - _ -> [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] + _ -> [T || T <- Tickets, T#ticket.assigned_to =:= Assigned] end, case Q of - undefined -> F2; - _ -> [T || T <- F2, - string:str(binary_to_list(T#ticket.error_message), binary_to_list(Q)) > 0] + undefined -> F1; + _ -> [T || T <- F1, string:str(binary_to_list(T#ticket.error_message), binary_to_list(Q)) > 0] end. %% @private Отсортировать тикеты согласно параметрам. @@ -153,12 +150,4 @@ 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. \ No newline at end of file + }. \ No newline at end of file