summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/bounty/bnt_generate_player.erl')
-rw-r--r-- | src/bounty/bnt_generate_player.erl | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/src/bounty/bnt_generate_player.erl b/src/bounty/bnt_generate_player.erl new file mode 100644 index 0000000..e02a94b --- /dev/null +++ b/src/bounty/bnt_generate_player.erl @@ -0,0 +1,191 @@ +-module(bnt_generate_player). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([attempt/3]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec reserve_login (binary(), binary()) -> 'ok'. +reserve_login (UsernameLC, EmailLC) -> + ok = ataxia_client:reserve(login_db, UsernameLC), + ok = ataxia_client:reserve(login_db, EmailLC), + + ok. + +-spec finalize_login (binary(), binary(), binary()) -> 'ok'. +finalize_login (UsernameLC, EmailLC, PlayerID) -> + LoginUpdateQueryOps = + ataxic:sequence_meta + ( + [ + ataxic:update_value(ataxic:constant(PlayerID)), + ataxic:update_read_permission + ( + ataxic:constant + ( + ataxia_security:allow_only + ( + ataxia_security:any() + ) + ) + ), + ataxic:update_write_permission + ( + ataxic:constant + ( + ataxia_security:allow_only + ( + ataxia_security:user_from_id(PlayerID) + ) + ) + ) + ] + ), + + ok = + ataxia_client:update + ( + login_db, + ataxia_security:janitor(), + LoginUpdateQueryOps, + UsernameLC + ), + + ok = + ataxia_client:update + ( + login_db, + ataxia_security:janitor(), + LoginUpdateQueryOps, + EmailLC + ), + + 'ok'. + +-spec generate_inventory (ataxia_id:type()) -> ataxia_id:type(). +generate_inventory (PlayerID) -> + Inventory = shr_inventory:new(PlayerID), + + {ok, InventoryID} = + ataxia_client:add + ( + inventory_db, + ataxia_security:allow_only(ataxia_security:any()), + ataxia_security:allow_only(ataxia_security:user_from_id(PlayerID)), + Inventory + ), + + InventoryID. + +-spec generate_roster (ataxia_id:type()) -> ataxia_id:type(). +generate_roster (PlayerID) -> + Roster = rst_roster:new(PlayerID), + {ok, RosterID} = + ataxia_client:add + ( + roster_db, + ataxia_security:allow_only(ataxia_security:any()), + ataxia_security:allow_only(ataxia_security:user_from_id(PlayerID)), + Roster + ), + + RosterID. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec attempt (binary(), binary(), binary()) -> shr_player:type(). +attempt (Username, Password, Email) -> + UsernameLC = string:lowercase(Username), + EmailLC = string:lowercase(Email), + + ok = reserve_login(UsernameLC, EmailLC), + + Player = shr_player:new(<<"">>, Username, Password, Email), + + JanitorOnlyPermission = + ataxia_security:allow_only(ataxia_security:janitor()), + + {ok, PlayerID} = + ataxia_client:add + ( + player_db, + JanitorOnlyPermission, + JanitorOnlyPermission, + Player + ), + + shr_janitor:new(player_db, PlayerID), + + InvID = generate_inventory(PlayerID), + RosterID = generate_roster(PlayerID), + + PlayerUpdateQueryOps = + ataxic:sequence_meta + ( + [ + ataxic:update_value + ( + ataxic:sequence + ( + [ + ataxic:update_field + ( + shr_player:get_id_field(), + ataxic:constant(PlayerID) + ), + ataxic:update_field + ( + shr_player:get_inventory_id_field(), + ataxic:constant(InvID) + ), + ataxic:update_field + ( + shr_player:get_roster_id_field(), + ataxic:constant(RosterID) + ) + ] + ) + ), + ataxic:update_read_permission + ( + ataxic:constant + ( + ataxia_security:allow_only(ataxia_security:any()) + ) + ), + ataxic:update_write_permission + ( + ataxic:constant + ( + ataxia_security:allow_only + ( + ataxia_security:user_from_id(PlayerID) + ) + ) + ) + ] + ), + + ok = finalize_login(UsernameLC, EmailLC, PlayerID), + + ok = + ataxia_client:update + ( + player_db, + ataxia_security:janitor(), + PlayerUpdateQueryOps, + PlayerID + ), + + + Result = shr_player:set_id(PlayerID, Player), + + Result. |