opencand/OpenCand.ETL/Repository/PartidoRepository.cs
Jose Henrique a3d67198af
All checks were successful
API and ETL Build / build_etl (push) Successful in 17s
API and ETL Build / build_api (push) Successful in 9s
partido + melhorias
2025-05-31 20:46:48 -03:00

50 lines
1.7 KiB
C#

using Dapper;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration;
using OpenCand.Core.Models;
using OpenCand.Repository;
namespace OpenCand.ETL.Repository
{
public class PartidoRepository : BaseRepository
{
// Memory cache for partido data
private readonly MemoryCache partidoCache = new MemoryCache(new MemoryCacheOptions());
public PartidoRepository(IConfiguration configuration) : base(configuration)
{
// Initialize the cache with a sliding expiration of 5 minutes
partidoCache = new MemoryCache(new MemoryCacheOptions
{
ExpirationScanFrequency = TimeSpan.FromMinutes(5)
});
}
public async Task AddPartidoAsync(Partido partido)
{
// Check if partido is already cached
if (partidoCache.TryGetValue(partido.Sigla, out Partido? cachedPartido))
{
// If partido is already cached, no need to insert again
return;
}
using (var connection = new Npgsql.NpgsqlConnection(ConnectionString))
{
await connection.ExecuteAsync(@"
INSERT INTO partido (sigla, nome, numero)
VALUES (@sigla, @nome, @numero)
ON CONFLICT DO NOTHING;",
new
{
sigla = partido.Sigla,
nome = partido.Nome,
numero = partido.Numero
});
partidoCache.Set(partido.Sigla, partido, TimeSpan.FromMinutes(5));
}
}
}
}