using CredentialManager.Models;
namespace CredentialManager.Services;
///
/// Interfaccia per il servizio di gestione delle associazioni record
///
public interface IRecordAssociationService
{
///
/// Salva una nuova associazione tra record sorgente e destinazione
///
Task SaveAssociationAsync(RecordAssociation association);
///
/// Cerca un'associazione esistente tramite chiave sorgente
///
Task FindAssociationAsync(string sourceName, string sourceKey, string destinationEntity);
///
/// Ottiene tutte le associazioni per una sorgente specifica
///
Task> GetAssociationsBySourceAsync(string sourceName, string sourceType);
///
/// Ottiene tutte le associazioni per un'entità di destinazione specifica
///
Task> GetAssociationsByDestinationAsync(string destinationEntity, string restCredentialName);
///
/// Ottiene tutte le associazioni attive
///
Task> GetAllActiveAssociationsAsync();
///
/// Aggiorna un'associazione esistente
///
Task UpdateAssociationAsync(RecordAssociation association);
///
/// Disattiva un'associazione (soft delete)
///
Task DeactivateAssociationAsync(int id);
///
/// Elimina definitivamente un'associazione
///
Task DeleteAssociationAsync(int id);
///
/// Pulisce le associazioni obsolete (opzionale)
///
Task CleanupOldAssociationsAsync(TimeSpan olderThan);
///
/// Elimina tutte le associazioni per una specifica combinazione sorgente-destinazione
///
Task ClearAssociationsAsync(string sourceName, 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);
}