private string GetBestOnlineStrategy(OnlineStrategyParameters parameters) { string bestStrategy = null; Campaign cpg = _campaigns.Find(cpg => cpg.Id == parameters.Id).FirstOrDefault(); foreach (Strategy strategy in cpg.Strategies) { if (strategy.StrategyType == StrategyType.Online && strategy.ExtraElements.URL == parameters.URL && strategy.StrategyBudget >= parameters.Budget) { bestStrategy = strategy.StrategyName; int remainingBudget = strategy.StrategyBudget - parameters.Budget; FilterDefinition <Campaign> filter = Builders <Campaign> .Filter.And( Builders <Campaign> .Filter.Eq(cpg => cpg.Id, parameters.Id), Builders <Campaign> .Filter.ElemMatch <Strategy>(cpg => cpg.Strategies, x => x.StrategyName == bestStrategy) ); UpdateDefinition <Campaign> update = Builders <Campaign> .Update.Set(cpg => cpg.Strategies[-1].StrategyBudget, remainingBudget); _campaigns.FindOneAndUpdateAsync(filter, update); break; } } return(bestStrategy); }
public async Task <ActionResult <string> > ObtainBestOnlineStrategy([FromBody] OnlineStrategyParameters parameters) { string result = await _campaignService.GetBestOnlineFromParams(parameters); return(Ok(result)); }
/** * Returns the best online strategy according to the given params and update it's strategy budget */ public async Task <string> GetBestOnlineFromParams(OnlineStrategyParameters parameters) { return(await Task.Run(() => GetBestOnlineStrategy(parameters))); }