public async Task <Result <GameDetailsResponse> > GetGameDetails(int gameId)
        {
            if (gameId <= 0)
            {
                return(Result.Failure <GameDetailsResponse>($"{nameof(gameId)} is invalid."));
            }

            var detailsResult = await _apiClient.SendGameDetailsRequest(new List <int> {
                gameId
            });

            if (detailsResult.IsFailure)
            {
                return(Result.Failure <GameDetailsResponse>($"Unable to retrieve game details - {detailsResult.Error}"));
            }

            var details = detailsResult.Value.Item.FirstOrDefault();

            var response = new GameDetailsResponse
            {
                Id             = details.Id,
                Developer      = string.Join(", ", details.Links.Where(l => l.Type.ToLower() == _configuration.DeveloperLinkType.ToLower()).Select(l => l.Value)),
                GameCategory   = GameCategoryReference.BoardGame,
                Genre          = string.Join(", ", details.Links.Where(l => l.Type.ToLower() == _configuration.GenreLinkType.ToLower()).Select(l => l.Value)),
                ImageUrl       = details.Image,
                Publisher      = string.Join(", ", details.Links.Where(l => l.Type.ToLower() == _configuration.PublisherLinkType.ToLower()).Select(l => l.Value)),
                Title          = details.Name.Value,
                YearReleasedOn = details.YearPublished.Value
            };

            return(Result.Success(response));
        }
        public async Task <Result <GameDetailsResponse> > GetGameDetails(int gameId)
        {
            if (gameId <= 0)
            {
                return(Result.Failure <GameDetailsResponse>($"{nameof(gameId)} is invalid."));
            }

            var detailsResult = await _apiClient.SendGameDetailsRequest(gameId);

            if (detailsResult.IsFailure)
            {
                return(Result.Failure <GameDetailsResponse>($"Unable to retrieve game details - {detailsResult.Error}"));
            }

            var details = detailsResult.Value;

            var hasReleaseDate = DateTimeOffset.TryParse(details.Results.OriginalReleaseDate, out var releaseDate);

            var response = new GameDetailsResponse
            {
                Id             = details.Results.Id,
                Developer      = string.Join(", ", details.Results.Developers.Select(g => g.Name)),
                GameCategory   = GameCategoryReference.VideoGame,
                Genre          = string.Join(", ", details.Results.Genres.Select(g => g.Name)),
                ImageUrl       = details.Results.Image.OriginalUrl,
                Title          = details.Results.Name,
                YearReleasedOn = hasReleaseDate
                    ? releaseDate.Year
                    : details.Results.ExpectedReleaseYear ?? DateTimeOffset.UtcNow.Year
            };

            return(Result.Success(response));
        }