Статистика для дашборда, расширенная #7

This commit is contained in:
2026-04-28 23:04:17 +03:00
parent c87d56bb49
commit 3da4ee28d4
11 changed files with 261 additions and 70 deletions

View File

@@ -39,12 +39,9 @@ create_admin(Req) ->
Role = binary_to_atom(RoleBin, utf8),
case core_admin:create(Email, Password, Role) of
{ok, Admin} ->
% Заглушка отправки email
% send_invitation_email(Email),
core_admin_audit:log(AdminId, Admin#admin.email, Admin#admin.role,
<<"create_admin">>, <<"admin">>, Admin,
admin_utils:client_ip(Req)),
send_json(Req2, 201, admin_to_json(Admin));
{error, email_exists} ->
send_error(Req2, 409, <<"Email already exists">>);
{error, Reason} ->
send_error(Req2, 500, Reason)
end;

View File

@@ -14,7 +14,14 @@ get_stats(Req) ->
case admin_utils:is_admin(AdminId) of
true ->
{ok, Admin} = core_admin:get_by_id(AdminId),
Stats = logic_stats:get_stats(Admin#admin.role, AdminId),
Role = Admin#admin.role,
% Извлекаем параметры from и to из запроса
Stats = case parse_date_range(Req1) of
{ok, From, To} ->
logic_stats:get_stats(Role, AdminId, From, To);
_ ->
logic_stats:get_stats(Role, AdminId)
end,
send_json(Req1, 200, Stats);
false ->
send_error(Req1, 403, <<"Admin access required">>)
@@ -23,6 +30,28 @@ get_stats(Req) ->
send_error(Req1, Code, Message)
end.
parse_date_range(Req) ->
Qs = cowboy_req:parse_qs(Req),
From = proplists:get_value(<<"from">>, Qs),
To = proplists:get_value(<<"to">>, Qs),
case {From, To} of
{undefined, _} -> error;
{_, undefined} -> error;
{F, T} ->
try
FromDT = iso8601_to_datetime(F),
ToDT = iso8601_to_datetime(T),
{ok, FromDT, ToDT}
catch _:_ -> error
end
end.
iso8601_to_datetime(Str) ->
[Date, Time] = binary:split(Str, <<"T">>),
[Y, M, D] = [binary_to_integer(X) || X <- binary:split(Date, <<"-">>, [global])],
[H, Min, S] = [binary_to_integer(X) || X <- binary:split(Time, <<":">>, [global])],
{{Y, M, D}, {H, Min, S}}.
send_json(Req, Status, Data) ->
Body = jsx:encode(Data),
cowboy_req:reply(Status, #{<<"content-type">> => <<"application/json">>}, Body, Req),