Улучшение безопасности и обработки ошибок. Этап 1. #8
This commit is contained in:
+31
-11
@@ -1,11 +1,11 @@
|
||||
-module(core_user).
|
||||
-include("records.hrl").
|
||||
|
||||
-export([create/2, get_by_id/1, get_by_email/1, update/2, delete/1]).
|
||||
-export([create/2, get_by_id/1, get_by_email/1, update/2, update_status/3, delete/1]).
|
||||
-export([email_exists/1]).
|
||||
-export([generate_id/0]).
|
||||
-export([list_users/0]).
|
||||
-export([block/1, unblock/1]).
|
||||
-export([block/2, unblock/2]).
|
||||
-export([count_users/0, count_users_by_date/2]).
|
||||
|
||||
%% Создание пользователя
|
||||
@@ -85,6 +85,15 @@ update(Id, Updates) ->
|
||||
{aborted, Reason} -> {error, Reason}
|
||||
end.
|
||||
|
||||
update_status(Id, Status, Reason) ->
|
||||
case get_by_id(Id) of
|
||||
{ok, User} ->
|
||||
Updated = User#user{status = Status, reason = Reason, updated_at = calendar:universal_time()},
|
||||
mnesia:dirty_write(Updated),
|
||||
{ok, Updated};
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
%% Удаление пользователя (soft delete)
|
||||
delete(Id) ->
|
||||
update(Id, [{status, deleted}]).
|
||||
@@ -94,30 +103,41 @@ list_users() ->
|
||||
ActiveUsers = [U || U <- Users, U#user.status =/= deleted],
|
||||
{ok, [user_to_map(U) || U <- ActiveUsers]}.
|
||||
|
||||
user_to_map(User) when is_map(User) ->
|
||||
#{
|
||||
id => maps:get(id, User),
|
||||
email => maps:get(email, User),
|
||||
role => maps:get(role, User, <<"user">>),
|
||||
status => maps:get(status, User, <<"active">>),
|
||||
reason => maps:get(reason, User, undefined),
|
||||
created_at => maps:get(created_at, User),
|
||||
updated_at => maps:get(updated_at, User)
|
||||
};
|
||||
|
||||
user_to_map(User) ->
|
||||
#{
|
||||
id => User#user.id,
|
||||
email => User#user.email,
|
||||
password_hash => User#user.password_hash,
|
||||
role => User#user.role,
|
||||
status => User#user.status,
|
||||
id => User#user.id,
|
||||
email => User#user.email,
|
||||
role => atom_to_binary(User#user.role, utf8),
|
||||
status => atom_to_binary(User#user.status, utf8),
|
||||
reason => User#user.reason,
|
||||
created_at => User#user.created_at,
|
||||
updated_at => User#user.updated_at
|
||||
}.
|
||||
|
||||
block(Id) ->
|
||||
block(Id, Reason) ->
|
||||
case get_by_id(Id) of
|
||||
{ok, User} ->
|
||||
Updated = User#user{status = blocked, updated_at = calendar:universal_time()},
|
||||
Updated = User#user{status = blocked, reason = Reason, updated_at = calendar:universal_time()},
|
||||
mnesia:dirty_write(Updated),
|
||||
{ok, Updated};
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
unblock(Id) ->
|
||||
unblock(Id, Reason) ->
|
||||
case get_by_id(Id) of
|
||||
{ok, User} ->
|
||||
Updated = User#user{status = active, updated_at = calendar:universal_time()},
|
||||
Updated = User#user{status = active, reason = Reason, updated_at = calendar:universal_time()},
|
||||
mnesia:dirty_write(Updated),
|
||||
{ok, Updated};
|
||||
Error -> Error
|
||||
|
||||
Reference in New Issue
Block a user