public async Task <DropProcessingResults> GetDropProcessingDryRun(int year) { IReadOnlyDictionary <LeagueYear, IReadOnlyList <DropRequest> > leaguesAndDropRequests = await _fantasyCriticRepo.GetActiveDropRequests(year); IReadOnlyList <Publisher> allPublishers = await _fantasyCriticRepo.GetAllPublishersForYear(year); var supportedYears = await _fantasyCriticRepo.GetSupportedYears(); IReadOnlyDictionary <LeagueYear, IReadOnlyList <DropRequest> > onlyLeaguesWithDrops = leaguesAndDropRequests.Where(x => x.Value.Any()).ToDictionary(x => x.Key, y => y.Value); var publishersInLeagues = allPublishers.Where(x => onlyLeaguesWithDrops.ContainsKey(x.LeagueYear)); DropProcessingResults results = _actionProcessingService.ProcessDropsIteration(onlyLeaguesWithDrops, publishersInLeagues, _clock, supportedYears); return(results); }
public DropProcessingResults ProcessDropsIteration(IReadOnlyDictionary <LeagueYear, IReadOnlyList <DropRequest> > allDropRequests, IEnumerable <Publisher> allPublishers, IClock clock, IReadOnlyList <SupportedYear> supportedYears) { List <Publisher> updatedPublishers = allPublishers.ToList(); List <PublisherGame> gamesToDelete = new List <PublisherGame>(); List <LeagueAction> leagueActions = new List <LeagueAction>(); List <DropRequest> successDrops = new List <DropRequest>(); List <DropRequest> failedDrops = new List <DropRequest>(); foreach (var leagueYearGroup in allDropRequests) { foreach (var dropRequest in leagueYearGroup.Value) { var affectedPublisher = updatedPublishers.Single(x => x.PublisherID == dropRequest.Publisher.PublisherID); var publishersInLeague = updatedPublishers.Where(x => x.LeagueYear.Equals(affectedPublisher.LeagueYear)); var otherPublishersInLeague = publishersInLeague.Except(new List <Publisher>() { affectedPublisher }); var dropResult = _gameAcquisitionService.CanDropGame(dropRequest, supportedYears, leagueYearGroup.Key, affectedPublisher, otherPublishersInLeague); if (dropResult.Result.IsSuccess) { successDrops.Add(dropRequest); var publisherGame = dropRequest.Publisher.GetPublisherGame(dropRequest.MasterGame); gamesToDelete.Add(publisherGame.Value); LeagueAction leagueAction = new LeagueAction(dropRequest, dropResult, clock.GetCurrentInstant()); affectedPublisher.DropGame(publisherGame.Value.WillRelease()); leagueActions.Add(leagueAction); } else { failedDrops.Add(dropRequest); LeagueAction leagueAction = new LeagueAction(dropRequest, dropResult, clock.GetCurrentInstant()); leagueActions.Add(leagueAction); } } } DropProcessingResults dropProcessingResults = new DropProcessingResults(successDrops, failedDrops, leagueActions, updatedPublishers, gamesToDelete); return(dropProcessingResults); }
public Task SaveProcessedDropResults(DropProcessingResults dropProcessingResults) { throw new NotImplementedException(); }