public async Task Add(Portfolio portfolio) { portfolio.Date = portfolio.Date.Date; Portfolio portfolioInDB = await Get(portfolio.ISIN, portfolio.Date); if (IsInToleranceRange(portfolio)) { if (portfolioInDB == null) { await _securityRepository.AddRange(portfolio.Positions.Select(x => x.Security)); _context.Portfolios.Add(portfolio); await _context.SaveChangesAsync(); } else { throw new ChangeConflictException("There is already Portfolio with ISIN and Date speicfied"); } } else { throw new ToleranceOfOutRangeException("Difference between portfolio market value and sum of positions' market value is too high"); } }
public async Task AddRange(IEnumerable <Security> securities) { foreach (Security security in securities) { Security securityInDB = await Get(security.ISIN); if (securityInDB == null) { await Add(security); await _context.SaveChangesAsync(); } else { Update(securityInDB, security); } } }