Рефакторинг обработчиков. Часть 3 #21
This commit is contained in:
@@ -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).
|
||||
|
||||
%%%===================================================================
|
||||
%%% Внутренние функции
|
||||
%%%===================================================================
|
||||
|
||||
@@ -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
@@ -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, _ = '_'},
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user