using BaseDomain.SimpleValidator; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BaseDomain.Base { public abstract class AEntity where TKey : class where T : class { ObjectValidatorBuilder objectValidatorBuilder; bool rulesAdded; public ObjectValidatorBuilder ValidatorBuilder { get { return objectValidatorBuilder; } } public AEntity() { T entity; try { entity = (T)Convert.ChangeType(this, typeof(T)); } catch (InvalidCastException) { entity = default; } objectValidatorBuilder = new ObjectValidatorBuilder(entity); AddRules(); } public ObjectValidatorBuilder InitValidator() { T entity; try { entity = (T)Convert.ChangeType(this, typeof(T)); } catch (InvalidCastException) { entity = default; } objectValidatorBuilder = new ObjectValidatorBuilder(entity); return objectValidatorBuilder; } public abstract TKey Id { get; set; } public void ValidateAndThrow() { SetClearAndRules(); objectValidatorBuilder.ThrowErrorMessages(); } public string GetErrorMessages() { SetClearAndRules(); return objectValidatorBuilder.ErrorMessagesAsString(); } public bool IsValid() { SetClearAndRules(); return objectValidatorBuilder.IsValid(); } private void SetClearAndRules() { objectValidatorBuilder.ClearRules(); AddRules(); objectValidatorBuilder.Build(); } public abstract void AddRules(); } }