예제 #1
0
        public async Task HandleAsync(BuySecurity command)
        {
            try
            {
                await portfolioService.BuySecurityAsync(command);

                var securityBougt = new SecurityBought(command.SecurityId, command.UserId, command.PortfolioId, command.Name,
                                                       command.Symbol, command.CurrentValue, command.Quantity);

                await busClient.PublishAsync(securityBougt);
            }
            catch (CustomException)
            {
            }
        }
예제 #2
0
        public async Task BuySecuritiesAsync(SecurityBought security)
        {
            if (security == null)
            {
                throw new CustomException("empty_security", "There was a problem with this security, please contact support.");
            }

            var portfolio = await repository.FindAsync(p => p.UserId.Equals(security.UserId) && p.PortfolioId.Equals(security.PortfolioId));

            if (portfolio == null)
            {
                throw new CustomException("portfolio_not_found", $"Portfolio not found for user: {security.UserId}");
            }

            var securityEntity = portfolio.Securities.FirstOrDefault(i => i.Symbol.Equals(security.Symbol));

            if (securityEntity != null)
            {
                securityEntity.AverageValue = security.CurrentValue;
                securityEntity.Quantity     = security.Quantity;
            }
            else
            {
                securityEntity = new Security
                {
                    Name         = security.Name,
                    Symbol       = security.Symbol,
                    AverageValue = security.CurrentValue,
                    Quantity     = security.Quantity,
                };
            }

            portfolio.Securities.Add(securityEntity);
            var saved = await repository.SaveAsync();

            if (!saved)
            {
                throw new CustomException("problem_buying_securities", $"Could not buy the security: {security.Symbol}.");
            }
        }