Exemplo n.º 1
0
        public ValidationResult ValidatePlayerBankAccount([FromUri] PlayerBankAccountRequest request)
        {
            var data = new EditPlayerBankAccountData();

            Mapper.DynamicMap(request, data);
            data.PlayerId = PlayerId;

            var result = _paymentQueries.ValidatePlayerBankAccount(data);

            if (result == null)
            {
                throw new RegoException(ErrorMessagesEnum.ServiceUnavailable.ToString());
            }

            var errors = new Dictionary <string, string>();

            if (result.Errors.Any())
            {
                result.Errors.ForEach(x =>
                {
                    if (!errors.ContainsKey(x.PropertyName))
                    {
                        errors.Add(x.PropertyName, x.ErrorMessage);
                    }
                });
            }

            return(new ValidationResult
            {
                Errors = errors
            });
        }
        public IHttpActionResult SaveBankAccount(EditPlayerBankAccountData model)
        {
            var isExistingBankAccount = model.Id.HasValue;

            VerifyPermission(isExistingBankAccount ? Permissions.Update : Permissions.Create, Modules.PlayerBankAccount);

            if (isExistingBankAccount)
            {
                var editValidationResult = _playerBankAccountCommands.ValidateThatPlayerBankAccountCanBeEdited(model);
                if (!editValidationResult.IsValid)
                {
                    return(Ok(ValidationExceptionResponse(editValidationResult.Errors)));
                }

                _playerBankAccountCommands.Edit(model);
                return(Ok(new { Result = "success" }));
            }

            var validationResult = _playerBankAccountCommands.ValidateThatPlayerBankAccountCanBeAdded(model);

            if (!validationResult.IsValid)
            {
                return(Ok(ValidationExceptionResponse(validationResult.Errors)));
            }

            _playerBankAccountCommands.Add(model);
            return(Ok(new { Result = "success" }));
        }
Exemplo n.º 3
0
        public void ThenPlayerBankAccountIsSuccessfullyAdded()
        {
            ScenarioContext.Current.Should().ContainKey("playerId");
            ScenarioContext.Current.Should().ContainKey("bankAccountId");
            var playerId      = ScenarioContext.Current.Get <Guid>("playerId");
            var bankAccountId = ScenarioContext.Current.Get <Guid>("bankAccountId");

            var data = new EditPlayerBankAccountData
            {
                Id            = Guid.NewGuid(),
                PlayerId      = playerId,
                Bank          = bankAccountId,
                AccountName   = TestDataGenerator.GetRandomString(),
                AccountNumber = TestDataGenerator.GetRandomString(10, "1234567890"),
                Province      = TestDataGenerator.GetRandomString(),
                City          = TestDataGenerator.GetRandomString(),
                Branch        = TestDataGenerator.GetRandomString(),
                SwiftCode     = TestDataGenerator.GetRandomString(),
                Address       = TestDataGenerator.GetRandomString()
            };

            var result = AdminApiProxy.SaveBankAccountInPlayerManager(data);

            result.Should().NotBeNull();
            result.StatusCode.ShouldBeEquivalentTo(HttpStatusCode.OK);
        }
Exemplo n.º 4
0
        public void Edit(EditPlayerBankAccountData model)
        {
            using (var scope = CustomTransactionScope.GetTransactionScope(IsolationLevel.RepeatableRead))
            {
                var validationResult = new EditPlayerBankAccountValidator(_repository, _queries).Validate(model);

                if (!validationResult.IsValid)
                {
                    throw new RegoValidationException(validationResult);
                }

                var bank = _repository.Banks.Single(x => x.Id == model.Bank);

                var bankAccount = _repository.PlayerBankAccounts
                                  .Include(x => x.Player.CurrentBankAccount)
                                  .Include(x => x.Player.Brand)
                                  .Include(x => x.Bank)
                                  .Single(x => x.Id == model.Id.Value);

                var isModified =
                    bankAccount.Bank.Id != bank.Id ||
                    bankAccount.Province != model.Province ||
                    bankAccount.City != model.City ||
                    bankAccount.Branch != model.Branch ||
                    bankAccount.SwiftCode != model.SwiftCode ||
                    bankAccount.Address != model.Address ||
                    bankAccount.AccountName != model.AccountName ||
                    bankAccount.AccountNumber != model.AccountNumber;

                if (isModified)
                {
                    bankAccount.Status = BankAccountStatus.Pending;
                }

                bankAccount.Bank          = bank;
                bankAccount.Province      = model.Province;
                bankAccount.City          = model.City;
                bankAccount.Branch        = model.Branch;
                bankAccount.SwiftCode     = model.SwiftCode;
                bankAccount.Address       = model.Address;
                bankAccount.AccountName   = model.AccountName;
                bankAccount.AccountNumber = model.AccountNumber;
                bankAccount.Updated       = DateTimeOffset.Now.ToBrandOffset(bankAccount.Player.Brand.TimezoneId);
                bankAccount.UpdatedBy     = _actorInfoProvider.Actor.UserName;

                _repository.SaveChanges();
                _eventBus.Publish(new PlayerBankAccountEdited
                {
                    Id           = bankAccount.Id,
                    Name         = bankAccount.AccountName,
                    Number       = bankAccount.AccountNumber,
                    EventCreated = bankAccount.Updated.Value,
                });

                scope.Complete();
            }
        }
Exemplo n.º 5
0
        public PlayerBankAccountResponse CreatePlayerBankAccount(PlayerBankAccountRequest request)
        {
            var data = new EditPlayerBankAccountData();

            Mapper.DynamicMap(request, data);
            data.PlayerId = PlayerId;
            var result = _playerBankAccountCommands.Add(data);

            return(new PlayerBankAccountResponse());
        }
Exemplo n.º 6
0
        public EditPlayerBankAccountData CreatePlayerBankAccountData()
        {
            var data = new EditPlayerBankAccountData
            {
                PlayerId      = new Guid("66AF937B-63D3-4CD4-89C4-7EECAD4FBB05"),
                Bank          = new Guid("46C5D75E-4DF4-41B0-AA71-1D5E8CDAA897"),
                AccountName   = TestDataGenerator.GetRandomString(),
                AccountNumber = TestDataGenerator.GetRandomString(7, "0123456789"),
                Province      = TestDataGenerator.GetRandomString(),
                City          = TestDataGenerator.GetRandomString(),
                Branch        = TestDataGenerator.GetRandomString(),
                SwiftCode     = TestDataGenerator.GetRandomString(),
                Address       = TestDataGenerator.GetRandomString(),
            };

            return(data);
        }
Exemplo n.º 7
0
        public Guid Add(EditPlayerBankAccountData model)
        {
            using (var scope = CustomTransactionScope.GetTransactionScope(IsolationLevel.RepeatableRead))
            {
                var validationResult = new AddPlayerBankAccountValidator(_repository, _queries).Validate(model);

                if (!validationResult.IsValid)
                {
                    throw new RegoValidationException(validationResult);
                }

                var player = _repository.Players
                             .Include(x => x.CurrentBankAccount)
                             .Single(x => x.Id == model.PlayerId);

                var bank = _repository.Banks
                           .Include(x => x.Brand)
                           .Single(x => x.Id == model.Bank);

                var bankAccount = new PlayerBankAccount
                {
                    Id            = Guid.NewGuid(),
                    Player        = player,
                    Status        = BankAccountStatus.Pending,
                    Bank          = bank,
                    Province      = model.Province,
                    City          = model.City,
                    Branch        = model.Branch,
                    SwiftCode     = model.SwiftCode,
                    Address       = model.Address,
                    AccountName   = model.AccountName,
                    AccountNumber = model.AccountNumber,
                    Created       = DateTimeOffset.Now.ToBrandOffset(bank.Brand.TimezoneId),
                    CreatedBy     = _actorInfoProvider.Actor.UserName
                };

                if (player.CurrentBankAccount == null || player.CurrentBankAccount.Status != BankAccountStatus.Active)
                {
                    if (player.CurrentBankAccount != null)
                    {
                        player.CurrentBankAccount.IsCurrent = false;
                    }

                    player.CurrentBankAccount = bankAccount;
                    bankAccount.IsCurrent     = true;
                }

                _repository.PlayerBankAccounts.Add(bankAccount);
                _repository.SaveChanges();

                _eventBus.Publish(new PlayerBankAccountAdded
                {
                    Id           = bankAccount.Id,
                    Name         = bankAccount.AccountName,
                    Number       = bankAccount.AccountNumber,
                    EventCreated = bankAccount.Created,
                });

                scope.Complete();
                return(bankAccount.Id);
            }
        }
Exemplo n.º 8
0
        public ValidationResult ValidateThatPlayerBankAccountCanBeAdded(EditPlayerBankAccountData data)
        {
            var validator = new AddPlayerBankAccountValidator(_repository, _queries);

            return(validator.Validate(data));
        }
Exemplo n.º 9
0
 public HttpResponseMessage SaveBankAccountInPlayerManager(EditPlayerBankAccountData request)
 {
     return(WebClient.SecurePostAsJson <EditPlayerBankAccountData, HttpResponseMessage>(Token, _url + AdminApiRoutes.SaveBankAccountInPlayerManager, request));
 }
Exemplo n.º 10
0
 public ValidationResult ValidatePlayerBankAccount(EditPlayerBankAccountData data)
 {
     return(new AddPlayerBankAccountValidator(_repository, this).Validate(data));
 }