using CredentialManager.Models;
namespace CredentialManager.Services;
///
/// Interfaccia per il servizio di gestione delle associazioni basate sui valori delle chiavi
///
public interface IKeyAssociationService
{
///
/// Salva una nuova associazione o aggiorna una esistente
///
Task SaveAssociationAsync(KeyAssociation association);
///
/// Versione thread-safe del SaveAssociationAsync che utilizza un DbContext separato per operazioni parallele
///
Task SaveAssociationParallelAsync(KeyAssociation association);
///
/// Cerca un'associazione esistente tramite valore chiave
///
Task FindAssociationByKeyValueAsync(string keyValue, string destinationEntity, string restCredentialName);
///
/// Cerca un'associazione esistente tramite valore chiave, indipendentemente dalla destinazione
///
Task FindAssociationByKeyValueAsync(string keyValue);
///
/// Ottiene tutte le associazioni per un'entità di destinazione specifica
///
Task> GetAssociationsByDestinationAsync(string destinationEntity, string restCredentialName);
///
/// Ottiene tutte le associazioni attive
///
Task> GetAllActiveAssociationsAsync();
///
/// Ottiene tutte le associazioni (attive e non)
///
Task> GetAllAssociationsAsync();
///
/// Aggiorna un'associazione esistente
///
Task UpdateAssociationAsync(KeyAssociation association);
///
/// Disattiva un'associazione
///
Task DeactivateAssociationAsync(int id);
///
/// Elimina definitivamente un'associazione
///
Task DeleteAssociationAsync(int id);
///
/// Pulisce le associazioni più vecchie di un determinato periodo
///
Task CleanupOldAssociationsAsync(TimeSpan olderThan);
///
/// Elimina tutte le associazioni per una specifica combinazione entità-credenziale
///
Task ClearAssociationsAsync(string destinationEntity, string restCredentialName);
///
/// Elimina tutte le associazioni nel sistema
///
Task ClearAllAssociationsAsync();
///
/// Verifica se un ID di destinazione esiste ancora nel sistema target
///
Task ValidateDestinationIdAsync(string destinationId, string destinationEntity, string restCredentialName);
///
/// Ottiene tutte le associazioni con ID di destinazione non validi
///
Task> GetInvalidAssociationsAsync(string destinationEntity, string restCredentialName);
///
/// Pulisce le associazioni con ID di destinazione non più validi
///
Task CleanupInvalidAssociationsAsync(string destinationEntity, string restCredentialName);
///
/// Aggiorna la data di ultima verifica per un'associazione
///
Task UpdateLastVerifiedAsync(int id);
///
/// Ottiene statistiche sulle associazioni
///
Task GetStatisticsAsync();
///
/// Versione thread-safe per operazioni parallele - Salva una associazione
///
Task SaveAssociationParallelAsync(string keyValue, string destinationEntity, string destinationId, string restCredentialName);
///
/// Versione thread-safe per operazioni parallele - Trova associazione per valore chiave
///
Task FindAssociationByKeyValueParallelAsync(string keyValue, string destinationEntity, string restCredentialName);
///
/// Versione thread-safe per operazioni parallele - Trova associazione per valore chiave (solo keyValue)
///
Task FindAssociationByKeyValueParallelAsync(string keyValue);
///
/// Versione thread-safe per operazioni parallele - Elimina associazione
///
Task DeleteAssociationParallelAsync(int id);
}
///
/// Statistiche sulle associazioni
///
public class AssociationStatistics
{
public int TotalAssociations { get; set; }
public int ActiveAssociations { get; set; }
public int InactiveAssociations { get; set; }
public int UniqueKeyValues { get; set; }
public int UniqueDestinationEntities { get; set; }
public DateTime? OldestAssociation { get; set; }
public DateTime? NewestAssociation { get; set; }
public Dictionary AssociationsByEntity { get; set; } = new();
}