public IActionResult GenerateForm([FromBody] ExcuseRequest request) { var excuse = _excuseService.GetMatchingExcuseOrDefault(request); ViewBag.Id = excuse.Id; ViewBag.Name = excuse.Name; ViewBag.Body = excuse.Body; return(View("ExcuseResponseView")); }
public ExcuseResponse GetMatchingExcuseOrDefault(ExcuseRequest request) { if (request.KeywordIds == null) { request.KeywordIds = new List <int>(); } var excuse = _storageService.GetExcuseForParameters(request); return(GenerateExcuseResponseOrDefault(excuse, request.Name)); }
public Excuse GetExcuseForParameters(ExcuseRequest request) { var excuses = _dbContext.Excuses .Include(x => x.ExcuseKeywords) .ThenInclude(x => x.Keyword) .Where(x => x.SubcategoryId == request.SubcategoryId) .Where(x => x.Tone == request.Tone) .Where(x => !request.ExcludedExcuseIds.Contains(x.Id)); //Based on keyword-matches find the best fitting excuse. If excuses share the same score pick a random one. excuses = excuses.OrderByDescending(x => x.ExcuseKeywords.Count(y => request.KeywordIds.Contains(y.Keyword.Id))) .ThenBy(x => Guid.NewGuid()); return(excuses.FirstOrDefault()); }