Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 6
0
 public async Task <IActionResult> GetRecommendedGames([FromQuery] GetRecommendedGamesQueryDto query)
 {
     return(Ok(await _recommendationService.GetRecommendedGamesAsync(query)));
 }