Files
ForgejoReleaseSync/Services/GithubService.cs
T

44 lines
1.4 KiB
C#

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<GithubService> logger)
{
public async Task<List<GithubReleaseResponseDto>> 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<GithubReleaseResponseDto>))]
[JsonSerializable(typeof(ForgejoCreateReleaseDto))]
[JsonSerializable(typeof(List<ForgejoReleaseResponseDto>))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}