public CreateAccountMessages.Response Handle(CreateAccountMessages.Request request) { // Validate request try { Validator.Validate(request); } catch (CreateAccountValidationException ex) { var errorResponse = new CreateAccountMessages.Response() { Success = false, Exception = ex }; return(errorResponse); } // Check for duplicate usernames var accountExists = AccountGateway.GetAccount(request.Username); if (accountExists != null) { var errorResponse = new CreateAccountMessages.Response() { Success = false, Exception = new CreateAccountException(CreateAccountException.GetMessage(CreateAccountExceptions.UsernameAlreadyExists, request)) }; return(errorResponse); } // Store in Gateway int accountId; try { var validatedAccount = new Account() { Username = request.Username, Password = request.Password }; accountId = AccountGateway.CreateAccount(validatedAccount); } catch (AccountGatewayException ex) { var errorResponse = new CreateAccountMessages.Response() { Success = false, Exception = ex }; return(errorResponse); } // Create associated Player try { var player = new Player() { AccountId = accountId, DisplayName = request.Username, }; PlayerGateway.CreatePlayer(player); } catch (PlayerGatewayException ex) { var errorResponse = new CreateAccountMessages.Response() { Success = false, Exception = ex }; return(errorResponse); } var response = new CreateAccountMessages.Response() { Success = true, Exception = null }; return(response); }