fix admin_handler_tickets
This commit is contained in:
@@ -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.
|
|
||||||
Reference in New Issue
Block a user