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); } }
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; }
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; }