using System.ComponentModel.DataAnnotations; namespace CredentialManager.Models; /// /// Entità per memorizzare le associazioni basate sui valori delle chiavi /// Un'associazione lega un valore di chiave a un record di destinazione, /// indipendentemente dalla sorgente che ha generato quel valore /// public class KeyAssociation { [Key] public int Id { get; set; } /// /// Valore della chiave che identifica univocamente l'oggetto business /// (es: "CUST001", "12345", "ABC-DEF-GHI") /// [Required] [MaxLength(500)] public string KeyValue { get; set; } = string.Empty; /// /// Nome del campo chiave nella sorgente /// (es: "CustomerCode", "ID", "ArticleNumber") /// [Required] [MaxLength(200)] public string SourceKeyField { get; set; } = string.Empty; /// /// Nome del campo chiave nella destinazione /// (es: "CardCode", "DocEntry", "ItemCode") /// [Required] [MaxLength(200)] public string DestinationKeyField { get; set; } = string.Empty; /// /// Nome del campo di destinazione mappato alla chiave sorgente /// (es: se dalla sorgente mappo "CardCode" verso "cardcode__c" in Salesforce, questo campo conterrà "cardcode__c") /// Questo è il campo personalizzato nella destinazione, mentre DestinationKeyField è tipicamente l'ID /// [MaxLength(200)] public string? MappedDestinationField { get; set; } /// /// Nome dell'entità di destinazione /// [Required] [MaxLength(200)] public string DestinationEntity { get; set; } = string.Empty; /// /// ID del record di destinazione /// [Required] [MaxLength(200)] public string DestinationId { get; set; } = string.Empty; /// /// Nome della credenziale REST utilizzata per la destinazione /// [Required] [MaxLength(100)] public string RestCredentialName { get; set; } = string.Empty; /// /// Data e ora della creazione dell'associazione /// public DateTime CreatedAt { get; set; } = DateTime.UtcNow; /// /// Data e ora dell'ultimo aggiornamento /// public DateTime? UpdatedAt { get; set; } /// /// Data e ora dell'ultima verifica che il record di destinazione esiste ancora /// public DateTime? LastVerifiedAt { get; set; } /// /// Indica se l'associazione è ancora attiva /// public bool IsActive { get; set; } = true; /// /// Informazioni aggiuntive sui record che hanno contribuito a questa associazione /// [MaxLength(2000)] public string? SourcesInfo { get; set; } /// /// Informazioni aggiuntive in formato JSON /// [MaxLength(2000)] public string? AdditionalInfo { get; set; } /// /// Hash SHA256 dei dati dei campi sorgente mappati. /// Utilizzato per rilevare cambiamenti nei dati sorgente e ottimizzare il trasferimento /// [MaxLength(64)] public string? Data_Hash { get; set; } }