using Microsoft.EntityFrameworkCore; using SchotzIadKmTracker.Api.Data; using SchotzIadKmTracker.Api.Models.Entities; namespace SchotzIadKmTracker.Api.Repositories; /// /// Implémentation EF Core de au-dessus d'. /// public class AdresseCacheRepository : IAdresseCacheRepository { private readonly AppDbContext _db; public AdresseCacheRepository(AppDbContext db) { _db = db; } public async Task> RechercherAsync( string fragmentNormalise, int limite, CancellationToken cancellationToken = default) { // La colonne Adresse stocke déjà la forme normalisée : la comparaison se fait donc // directement sur celle-ci. EF.Functions.Like assure une comparaison indépendante // de la casse côté SQLite. var motif = $"%{fragmentNormalise}%"; return await _db.AdresseCache .Where(a => EF.Functions.Like(a.Adresse, motif)) .OrderByDescending(a => a.DerniereUtilisation) .Take(limite) .ToListAsync(cancellationToken); } public async Task ObtenirParAdresseNormaliseeAsync( string adresseNormalisee, CancellationToken cancellationToken = default) { return await _db.AdresseCache .FirstOrDefaultAsync(a => a.Adresse == adresseNormalisee, cancellationToken); } public async Task AjouterAsync(AdresseCache entree, CancellationToken cancellationToken = default) { await _db.AdresseCache.AddAsync(entree, cancellationToken); } public Task CompterAsync(CancellationToken cancellationToken = default) { return _db.AdresseCache.CountAsync(cancellationToken); } public async Task> ObtenirPlusAnciennesAsync( int nombre, CancellationToken cancellationToken = default) { if (nombre <= 0) { return Array.Empty(); } return await _db.AdresseCache .OrderBy(a => a.DerniereUtilisation) .Take(nombre) .ToListAsync(cancellationToken); } public void Supprimer(IEnumerable entrees) { _db.AdresseCache.RemoveRange(entrees); } public Task SauvegarderAsync(CancellationToken cancellationToken = default) { return _db.SaveChangesAsync(cancellationToken); } }