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) { } }
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}."); } }