Example #1
0
        public async Task <IActionResult> GetRecs([FromBody] AnimeRecsInputJson input,
                                                  [FromServices] IOptionsSnapshot <Config.RecommendationsConfig> recConfig,
                                                  [FromServices] IMyAnimeListApiFactory malApiFactory, [FromServices] IAnimeRecsClientFactory recClientFactory,
                                                  [FromServices] IAnimeRecsDbConnectionFactory dbConnFactory, [FromServices] IRazorViewEngine viewEngine,
                                                  [FromServices] ITempDataProvider tempProvider)
        {
            if (!ModelState.IsValid)
            {
                AjaxError error = new AjaxError(ModelState);
                _logger.LogDebug("Invalid input received for GetRecs: {0}", error.Message);
                return(BadRequest(error));
            }

            if (input.RecSourceName == null)
            {
                input.RecSourceName = recConfig.Value.DefaultRecSource;
            }

            try
            {
                MalUserLookupResults userLookup = await GetUserLookupAsync(input, malApiFactory).ConfigureAwait(false);

                Dictionary <int, MalListEntry> animeList = new Dictionary <int, MalListEntry>();
                foreach (MyAnimeListEntry listEntry in userLookup.AnimeList)
                {
                    animeList[listEntry.AnimeInfo.AnimeId] = new AnimeRecs.RecEngine.MAL.MalListEntry((byte?)listEntry.Score, listEntry.Status, (short)listEntry.NumEpisodesWatched);
                }

                Dictionary <int, MalListEntry> animeWithheld = WithholdAnime(input, animeList);

                MalRecResults <IEnumerable <IRecommendation> > recResults = await GetRecommendationsAsync(input, recConfig.Value, animeList, animeWithheld, recClientFactory).ConfigureAwait(false);

                GetRecsViewModel viewModel = new GetRecsViewModel(
                    results: recResults,
                    userId: userLookup.UserId,
                    userName: userLookup.CanonicalUserName,
                    userLookup: userLookup,
                    userAnimeList: animeList,
                    maximumRecommendationsToReturn: recConfig.Value.MaximumRecommendationsToReturn,
                    maximumRecommendersToReturn: recConfig.Value.MaximumRecommendersToReturn,
                    animeWithheld: animeWithheld,
                    dbConnectionFactory: dbConnFactory
                    );

                RecResultsAsHtmlJson resultsJson = await GetResultHtmlAsync(viewModel, input, viewEngine, tempProvider).ConfigureAwait(false);

                return(Ok(resultsJson));
            }
            catch (ShortCircuitException ex)
            {
                return(ex.Result);
            }
        }
Example #2
0
        public GetRecsModule(IConfig config, IMyAnimeListApiFactory malApiFactory, IAnimeRecsClientFactory recClientFactory, IAnimeRecsDbConnectionFactory dbConnectionFactory, IViewFactory viewFactory, IViewLocator viewLocator, RazorViewEngine viewEngine, IRenderContextFactory renderContextFactory)
        {
            _config = config;
            _malApiFactory = malApiFactory;
            _recClientFactory = recClientFactory;
            _dbConnectionFactory = dbConnectionFactory;
            _viewLocator = viewLocator;
            _viewEngine = viewEngine;
            _renderContextFactory = renderContextFactory;

            Post["/GetRecs"] = GetRecs;
        }
 public GetRecsViewModel(MalRecResults<IEnumerable<IRecommendation>> results, int userId, string userName,
     MalUserLookupResults userLookup, IDictionary<int, MalListEntry> userAnimeList,
     int maximumRecommendationsToReturn, int maximumRecommendersToReturn, IDictionary<int, MalListEntry> animeWithheld, IAnimeRecsDbConnectionFactory dbConnectionFactory)
 {
     Results = results;
     UserId = userId;
     UserName = userName;
     UserLookup = userLookup;
     UserAnimeList = userAnimeList;
     MaximumRecommendationsToReturn = maximumRecommendationsToReturn;
     MaximumRecommendersToReturn = maximumRecommendersToReturn;
     DbConnectionFactory = dbConnectionFactory;
     StreamsByAnime = new Dictionary<int, ICollection<streaming_service_anime_map>>();
     AnimeWithheld = animeWithheld;
 }
Example #4
0
 public GetRecsViewModel(MalRecResults <IEnumerable <IRecommendation> > results, int userId, string userName,
                         MalUserLookupResults userLookup, IDictionary <int, MalListEntry> userAnimeList,
                         int maximumRecommendationsToReturn, int maximumRecommendersToReturn, IDictionary <int, MalListEntry> animeWithheld, IAnimeRecsDbConnectionFactory dbConnectionFactory)
 {
     Results       = results;
     UserId        = userId;
     UserName      = userName;
     UserLookup    = userLookup;
     UserAnimeList = userAnimeList;
     MaximumRecommendationsToReturn = maximumRecommendationsToReturn;
     MaximumRecommendersToReturn    = maximumRecommendersToReturn;
     DbConnectionFactory            = dbConnectionFactory;
     StreamsByAnime = new Dictionary <int, ICollection <streaming_service_anime_map> >();
     AnimeWithheld  = animeWithheld;
 }