public async Task <ICollection <long> > GetRecommendedGamesAsync(GetRecommendedGamesQueryDto query, CancellationToken ct = default) { _logger.LogInformation("Get recommended games for game {GameId} for account {AccountId}", query.GameId); var transactions = await GetGameTransactionsAsync(query, ct); return(GetRecommendedGames(query, transactions)); }
private async Task <long[][]> GetGameTransactionsAsync( GetRecommendedGamesQueryDto query, CancellationToken ct) { var transactions = query.AccountId.HasValue ? await _unitOfWork.OrderRepository.GetGameTransactionsByAccountAsync(query.AccountId.Value, query.GameId, ct) : await _unitOfWork.OrderRepository.GetGameTransactionsByGameAsync(query.GameId, ct); return(transactions.Select(s => s.Select(i => i.GameId).ToArray()).ToArray()); }
private ICollection <long> GetRecommendedGames(GetRecommendedGamesQueryDto query, long[][] transactions) { var transactionalPercentage = transactions.Length * 100 / _recommendationConfiguration.PercentageOfTransaction; var apriori = new Apriori <long>(transactionalPercentage, _recommendationConfiguration.Confident); var classifier = apriori.Learn(transactions); var matches = classifier.Decide(new SortedSet <long> { query.GameId }); return(matches.SelectMany(t => t.Select(i => i)).Distinct().Take(query.Take).ToList()); }
public async Task <ICollection <GetGameDto> > GetRecommendedGamesAsync(GetRecommendedGamesQueryDto query) { _logger.LogInformation("Get recommended games for {GameId}", query.GameId); IEnumerable <long> gameIds = await _recommendationApiClient.GetRecommendedGamesForGameAsync( _httpContextAccessor.GetAuthorizationHeaderOrDefault(), query); var gameIdsDto = new GetGameByIdsDto(gameIds); ICollection <GetGameDto> games = await _gameApiClient.GetGameByIdsAsync(gameIdsDto); return(games); }
protected override async Task <IEnumerable <long> > ExecuteAsync(GetRecommendedGamesQuery request, CancellationToken ct) { GetRecommendedGamesQueryDto queryDto = _mapper.Map <GetRecommendedGamesQueryDto>(request); return(await _recommendationService.GetRecommendedGamesAsync(queryDto, ct)); }
public async Task <IActionResult> GetRecommendedGames([FromQuery] GetRecommendedGamesQueryDto query) { return(Ok(await _recommendationService.GetRecommendedGamesAsync(query))); }