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"));
        }
示例#2
0
        public ExcuseResponse GetMatchingExcuseOrDefault(ExcuseRequest request)
        {
            if (request.KeywordIds == null)
            {
                request.KeywordIds = new List <int>();
            }
            var excuse = _storageService.GetExcuseForParameters(request);

            return(GenerateExcuseResponseOrDefault(excuse, request.Name));
        }
示例#3
0
        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());
        }