using System.Text.Json; using System.Text.Json.Serialization; using ForgejoReleaseSync.DTOs; using ForgejoReleaseSync.DTOs.Forgejo; using Microsoft.Extensions.Logging; namespace ForgejoReleaseSync.Services; public class GithubService( AppConfig config, RepositoryConfig repoConfig, HttpClient httpClient, ILogger logger) { public async Task> FetchRepoReleasesAsync(string owner, string repo) { try { var response = await httpClient.GetAsync( new Uri($"https://api.github.com/repos/{owner}/{repo}/releases?per_page=3&page=1")); response.EnsureSuccessStatusCode(); var responseStream = await response.Content.ReadAsStreamAsync(); var releases = await JsonSerializer.DeserializeAsync(responseStream, AppJsonSerializerContext.Default.ListGithubReleaseResponseDto); return releases ?? []; } catch (Exception ex) { logger.LogError(ex, "Failed to fetch posts from Mastodon"); throw; } } } // TODO: move this [JsonSerializable(typeof(List))] [JsonSerializable(typeof(ForgejoCreateReleaseDto))] [JsonSerializable(typeof(List))] internal partial class AppJsonSerializerContext : JsonSerializerContext { }