Статистика для дашборда, расширенная #7
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user