Рефакторинг обработчиков. Часть 3 #21

This commit is contained in:
2026-05-13 23:02:59 +03:00
parent 61bb44ab4a
commit 40806df62a
91 changed files with 6138 additions and 7150 deletions
+22 -1
View File
@@ -1,9 +1,23 @@
-module(logic_admin).
-export([list_admins/2, get_admin/1, update_admin/2]).
-export([list_admins/2, get_admin/1, update_admin/2, delete_admin/1, create_admin/3]).
-include("records.hrl").
%% @doc Создаёт нового администратора (доступно только суперадмину).
%% Роль может быть superadmin, admin, moderator или support.
-spec create_admin(binary(), binary(), atom()) ->
{ok, #admin{}} | {error, email_exists | invalid_role}.
create_admin(Email, Password, Role) when Role =:= superadmin; Role =:= admin; Role =:= moderator; Role =:= support ->
case core_admin:get_by_email(Email) of
{ok, _} -> {error, email_exists};
{error, not_found} ->
{ok, PasswordHash} = logic_auth:hash_password(Password),
core_admin:create(Email, PasswordHash, Role)
end;
create_admin(_, _, _) ->
{error, invalid_role}.
%%%-------------------------------------------------------------------
%%% Административный список администраторов с пагинацией
%%%-------------------------------------------------------------------
@@ -39,6 +53,13 @@ update_admin(AdminId, Updates) ->
Error
end.
%%%-------------------------------------------------------------------
%%% Удалить администратора (физическое удаление из базы)
%%%-------------------------------------------------------------------
-spec delete_admin(binary()) -> {ok, deleted} | {error, not_found}.
delete_admin(AdminId) ->
core_admin:delete(AdminId).
%%%===================================================================
%%% Внутренние функции
%%%===================================================================
+1 -1
View File
@@ -268,7 +268,7 @@ target_exists(_, _) -> false.
update_target_rating(event, EventId) ->
{Avg, Count} = core_review:get_average_rating(event, EventId),
io:format("Updating event ~p rating: avg=~p, count=~p~n", [EventId, Avg, Count]),
%% io:format("Updating event ~p rating: avg=~p, count=~p~n", [EventId, Avg, Count]),
core_event:update(EventId, [{rating_avg, Avg}, {rating_count, Count}]);
update_target_rating(calendar, CalendarId) ->
{Avg, Count} = core_review:get_average_rating(calendar, CalendarId),
+14 -14
View File
@@ -13,10 +13,20 @@ search(Type, Query, UserId, Params) ->
Offset = maps:get(offset, Params, 0),
case Type of
<<"event">> -> search_events(Query, UserId, Params, Limit, Offset);
<<"calendar">> -> search_calendars(Query, UserId, Params, Limit, Offset);
_ -> search_all(Query, UserId, Params, Limit, Offset)
end.
<<"event">> ->
{ok, Total, Events} = search_events(Query, UserId, Params, Limit, Offset),
{ok, Total, #{<<"events">> => Events}};
<<"calendar">> ->
{ok, Total, Calendars} = search_calendars(Query, UserId, Params, Limit, Offset),
{ok, Total, #{<<"calendars">> => Calendars}};
_ ->
{ok, EventsTotal, Events} = search_events(Query, UserId, Params, Limit, Offset),
{ok, CalendarsTotal, Calendars} = search_calendars(Query, UserId, Params, Limit, Offset),
{ok, EventsTotal + CalendarsTotal, #{
<<"events">> => Events,
<<"calendars">> => Calendars
}}
end.
%% ============ Поиск событий ============
search_events(Query, UserId, Params, Limit, Offset) ->
@@ -37,16 +47,6 @@ search_calendars(Query, UserId, Params, Limit, Offset) ->
{ok, length(Filtered), format_calendars(Paginated)}.
%% ============ Поиск всего ============
search_all(Query, UserId, Params, Limit, Offset) ->
{ok, EventsTotal, Events} = search_events(Query, UserId, Params, Limit, Offset),
{ok, CalendarsTotal, Calendars} = search_calendars(Query, UserId, Params, Limit, Offset),
{ok, EventsTotal + CalendarsTotal, #{
events => Events,
calendars => Calendars
}}.
%% ============ Получение данных ============
get_all_events() ->
Match = #event{status = active, is_instance = false, _ = '_'},
+1 -1
View File
@@ -93,7 +93,7 @@ resolve_ticket(AdminId, TicketId, ResolutionNote) ->
case admin_utils:is_admin(AdminId) of
true ->
core_ticket:update_ticket(TicketId, #{
<<"status">> => <<"closed">>,
<<"status">> => <<"resolved">>,
<<"resolution_note">> => ResolutionNote
});
false -> {error, access_denied}
+8 -6
View File
@@ -45,9 +45,8 @@ update_user_admin(UserId, Updates) ->
-spec delete_user_admin(binary()) -> {ok, #user{}} | {error, not_found}.
delete_user_admin(UserId) ->
case core_user:get_by_id(UserId) of
{ok, User} ->
UpdatedUser = User#user{status = deleted},
core_user:update(UserId, UpdatedUser);
{ok, _User} ->
core_user:delete(UserId);
Error ->
Error
end.
@@ -58,15 +57,18 @@ delete_user_admin(UserId) ->
apply_filters(Users, Filters) ->
Role = maps:get(role, Filters, undefined),
Status = maps:get(status, Filters, undefined),
StatusBin = maps:get(status, Filters, undefined),
Q = maps:get(q, Filters, undefined),
F1 = case Role of
undefined -> Users;
_ -> [U || U <- Users, U#user.role =:= Role]
end,
F2 = case Status of
F2 = case StatusBin of
undefined -> F1;
_ -> [U || U <- F1, U#user.status =:= Status]
_ ->
StatusAtom = try binary_to_existing_atom(StatusBin, utf8)
catch error:badarg -> StatusBin end,
[U || U <- F1, U#user.status =:= StatusAtom]
end,
case Q of
undefined -> F2;