Пример #1
0
        public DomainResult BuyPlayer(string playerTypeId)
        {
            var playerBuyConfig = AllowedPlayers.FirstOrDefault(ap => ap.PlayerTypeId.Equals(playerTypeId));

            if (playerBuyConfig == null)
            {
                return(DomainResult.Error(new CanNotUsePlayerInThisRaceError(playerTypeId)));
            }

            var amountOfPlayerTypeToBuy = Players.Count(p => p.PlayerTypeId.Equals(playerTypeId));

            if (amountOfPlayerTypeToBuy >= playerBuyConfig.MaximumPlayers)
            {
                return(DomainResult.Error(new TeamFullError(playerBuyConfig.MaximumPlayers)));
            }

            if (playerBuyConfig.Cost.MoreThan(TeamMoney))
            {
                return(DomainResult.Error(new FewMoneyInTeamChestError(playerBuyConfig.Cost.Value, TeamMoney.Value)));
            }

            var newTeamMoney     = TeamMoney.Minus(playerBuyConfig.Cost);
            var orderedPositions = Players.Select(p => p.PlayerPositionNumber).OrderBy(p => p).ToList();
            var travers          = FindFirstFreeNumber(orderedPositions, 1);

            var playerBought = _teamState.BoughtEvent(TeamId, playerTypeId, travers, Guid.NewGuid(),
                                                      newTeamMoney);

            Apply(new List <IDomainEvent> {
                playerBought
            });
            return(DomainResult.Ok(playerBought));
        }
Пример #2
0
        public DomainResult RemovePlayer(Guid playerId)
        {
            var playerReadModel = Players.Single(p => p.PlayerId == playerId);
            var playerBuyConfig = AllowedPlayers.Single(ap => ap.PlayerTypeId.Equals(playerReadModel.PlayerTypeId));
            var newTeamMoney    = TeamMoney.Plus(playerBuyConfig.Cost);

            var playerRemovedFromDraft = new PlayerRemoved(TeamId, playerId, newTeamMoney);

            Apply(playerRemovedFromDraft);
            return(DomainResult.Ok(playerRemovedFromDraft));
        }