Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(cavv_user).
- -behavior(gen_server).
- -define(SERVER(UserId), {via, gproc, {n, l, {?MODULE, UserId}}}).
- start_link(UserId) ->
- gen_server:start_link(?SERVER(UserId), ?MODULE, [UserId], []).
- change_email_address(UserId, EmailAddress) ->
- gen_server:call(?SERVER(AggregateId), {execute_command, #change_user_email_address{user_id=UserId, email_address=EmailAddress}}).
- -module(cavv_user_sup).
- -behaviour(supervisor).
- -define(CHILD(ChildName, Type, Args), {ChildName, {ChildName, start_link, Args}, temporary, 5000, Type, [ChildName]}).
- start_link() ->
- supervisor:start_link({local, ?SERVER}, ?MODULE, []).
- start_child(UserId) ->
- supervisor:start_child(?SERVER, [UserId]).
- init([]) ->
- RestartStrategy = {simple_one_for_one, 1, 5},
- Children = [?CHILD(cavv_user, worker, [])],
- {ok, { RestartStrategy, Children} }.
- cavv_user_dispatch_sup
- | |
- cavv_user_dispatcher |
- (gen_server) |
- |
- |
- cavv_user_sup
- | | |
- cavv_user_1...cavv_user_N
- -module(cavv_user_dispatcher).
- dispatch_command(UserId, Fun) ->
- gen_server:call(?SERVER, {dispatch_command, {UserId, Fun}}).
- handle_call({dispatch_command, {UserId, Fun}}, _From, State) ->
- cavv_user_sup:start_child(UserId),
- Fun(), %% How to pass: cavv_user:change_email_address(..,..)?
- {reply, ok, State};
- -module(cavv_user_dispatcher).
- change_user_email_address(UserId, EmailAddress) ->
- gen_server:call(?SERVER, {change_user_email_address, {UserId, EmailAddress}}).
- handle_call({change_user_email_address, {UserId, EmailAddress}}, _From, State) ->
- cavv_user_sup:start_child(UserId),
- cavv_user:change_email_address(UserId, EmailAddress),
- {reply, ok, State};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement