diff --git a/Sources/GameAtlas/Models/API/IGDBClient.cs b/Sources/GameAtlas/Models/API/IGDBClient.cs new file mode 100644 index 0000000..a3884e1 --- /dev/null +++ b/Sources/GameAtlas/Models/API/IGDBClient.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.Options; +using System.Diagnostics; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Net.Http.Json; +using System.Runtime; +using System.Text.Json; +using System.Threading.Tasks; + +namespace Models.API +{ + public class IGDBClient + { + private readonly HttpClient _httpClient; + private readonly AuthService _authService; + private readonly IGDBSettings _settings; + + public IGDBClient(HttpClient httpClient, AuthService authService, IGDBSettings settings) + { + _httpClient = httpClient; + _authService = authService; + _settings = settings; + } + + public async Task GetGamesAsync() + { + var authResponse = await _authService.GetAccessTokenAsync(_settings.ClientId, _settings.ClientSecret); + _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResponse.AccessToken); + _httpClient.DefaultRequestHeaders.Add("Client-ID", _settings.ClientId); + + var request = new HttpRequestMessage(HttpMethod.Post, "https://api.igdb.com/v4/games"); + request.Content = new StringContent("fields name,genres.name; limit 10;", System.Text.Encoding.UTF8, "application/json"); + + var response = await _httpClient.SendAsync(request); + + if (!response.IsSuccessStatusCode) + { + var errorContent = await response.Content.ReadAsStringAsync(); + Console.WriteLine($"Request error: {response.StatusCode}, Content: {errorContent}"); + throw new HttpRequestException($"Response status code: {response.StatusCode} ({errorContent})"); + } + + var responseContent = await response.Content.ReadAsStringAsync(); + return responseContent; + } + } +}