public FinalizedActionProcessingResults(Guid processSetID, Instant processTime, string processName, ActionProcessingResults results) { ProcessSetID = processSetID; ProcessTime = processTime; ProcessName = processName; Results = results; }
private ActionProcessingResults ProcessPickupsIteration(SystemWideValues systemWideValues, IReadOnlyDictionary <LeagueYear, IReadOnlyList <PickupBid> > allActiveBids, ActionProcessingResults existingResults, Instant processingTime, IReadOnlyDictionary <Guid, MasterGameYear> masterGameYearDictionary) { IEnumerable <PickupBid> flatAllBids = allActiveBids.SelectMany(x => x.Value); var publisherStateSet = existingResults.PublisherStateSet; var processedBids = new ProcessedBidSet(); foreach (var leagueYear in allActiveBids) { if (!leagueYear.Value.Any()) { continue; } var processedBidsForLeagueYear = ProcessPickupsForLeagueYear(leagueYear.Key, leagueYear.Value, publisherStateSet, systemWideValues, processingTime); processedBids = processedBids.AppendSet(processedBidsForLeagueYear); } ActionProcessingResults bidResults = GetBidProcessingResults(processedBids.SuccessBids, processedBids.FailedBids, publisherStateSet, processingTime, masterGameYearDictionary); var newResults = existingResults.Combine(bidResults); var remainingBids = flatAllBids.Except(processedBids.ProcessedBids); if (remainingBids.Any()) { IReadOnlyDictionary <LeagueYear, IReadOnlyList <PickupBid> > remainingBidDictionary = remainingBids.GroupToDictionary(x => x.LeagueYear); var subProcessingResults = ProcessPickupsIteration(systemWideValues, remainingBidDictionary, newResults, processingTime, masterGameYearDictionary); ActionProcessingResults combinedResults = newResults.Combine(subProcessingResults); return(combinedResults); } return(newResults); }
public FinalizedActionProcessingResults ProcessActions(SystemWideValues systemWideValues, IReadOnlyDictionary <LeagueYear, IReadOnlyList <PickupBid> > allActiveBids, IReadOnlyDictionary <LeagueYear, IReadOnlyList <DropRequest> > allActiveDrops, IEnumerable <Publisher> publishers, Instant processingTime, IReadOnlyDictionary <Guid, MasterGameYear> masterGameYearDictionary) { var publisherStateSet = new PublisherStateSet(publishers); var flatBids = allActiveBids.SelectMany(x => x.Value); var invalidBids = flatBids.Where(x => x.CounterPick && x.ConditionalDropPublisherGame is not null); if (invalidBids.Any()) { throw new Exception("There are counter pick bids with conditional drops."); } string processName = $"Drop/Bid Processing ({processingTime.ToEasternDate()})"; Guid processSetID = Guid.NewGuid(); if (!allActiveBids.Any() && !allActiveDrops.Any()) { var emptyResults = ActionProcessingResults.GetEmptyResultsSet(publisherStateSet); return(new FinalizedActionProcessingResults(processSetID, processingTime, processName, emptyResults)); } ActionProcessingResults dropResults = ProcessDrops(allActiveDrops, publisherStateSet, processingTime); if (!allActiveBids.Any()) { return(new FinalizedActionProcessingResults(processSetID, processingTime, processName, dropResults)); } ActionProcessingResults bidResults = ProcessPickupsIteration(systemWideValues, allActiveBids, dropResults, processingTime, masterGameYearDictionary); return(new FinalizedActionProcessingResults(processSetID, processingTime, processName, bidResults)); }
public ActionProcessingResults Combine(ActionProcessingResults subProcessingResults) { return(new ActionProcessingResults( SuccessBids.Concat(subProcessingResults.SuccessBids).DistinctBy(x => x.PickupBid.BidID), FailedBids.Concat(subProcessingResults.FailedBids).DistinctBy(x => x.PickupBid.BidID), SuccessDrops.Concat(subProcessingResults.SuccessDrops).DistinctBy(x => x.DropRequestID), FailedDrops.Concat(subProcessingResults.FailedDrops).DistinctBy(x => x.DropRequestID), LeagueActions.Concat(subProcessingResults.LeagueActions).DistinctBy(x => x.ActionInternalID), subProcessingResults.PublisherStateSet, AddedPublisherGames.Concat(subProcessingResults.AddedPublisherGames).DistinctBy(x => x.PublisherGameID), RemovedPublisherGames.Concat(subProcessingResults.RemovedPublisherGames).DistinctBy(x => x.PublisherGame.PublisherGameID))); }
private ActionProcessingResults ProcessDrops(IReadOnlyDictionary <LeagueYear, IReadOnlyList <DropRequest> > allDropRequests, PublisherStateSet publisherStateSet, Instant processingTime) { List <FormerPublisherGame> gamesToDelete = new List <FormerPublisherGame>(); 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 = publisherStateSet.GetPublisher(dropRequest.Publisher.PublisherID); var dropResult = _gameAcquisitionService.CanDropGame(dropRequest, leagueYearGroup.Key, affectedPublisher); if (dropResult.Result.IsSuccess) { successDrops.Add(dropRequest); var publisherGame = dropRequest.Publisher.GetPublisherGameOrThrow(dropRequest.MasterGame); var formerPublisherGame = publisherGame.GetFormerPublisherGame(processingTime, "Dropped by player"); gamesToDelete.Add(formerPublisherGame); LeagueAction leagueAction = new LeagueAction(dropRequest, dropResult, processingTime); publisherStateSet.DropGameForPublisher(affectedPublisher, publisherGame, leagueYearGroup.Key.Options); leagueActions.Add(leagueAction); } else { failedDrops.Add(dropRequest); LeagueAction leagueAction = new LeagueAction(dropRequest, dropResult, processingTime); leagueActions.Add(leagueAction); } } } ActionProcessingResults dropProcessingResults = ActionProcessingResults.GetResultsSetFromDropResults(successDrops, failedDrops, leagueActions, publisherStateSet, gamesToDelete); return(dropProcessingResults); }