using System.Runtime.Serialization; using Umbraco.Cms.Core.Models.Entities; namespace Umbraco.Cms.Core.Models; /// /// Represents a consent. /// [Serializable] [DataContract(IsReference = true)] public class Consent : EntityBase, IConsent { private string? _action; private string? _comment; private string? _context; private bool _current; private string? _source; private ConsentState _state; /// /// Gets the previous states of this consent. /// public List? HistoryInternal { get; set; } /// public bool Current { get => _current; set => SetPropertyValueAndDetectChanges(value, ref _current, nameof(Current)); } /// public string? Source { get => _source; set { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException(nameof(value)); } SetPropertyValueAndDetectChanges(value, ref _source, nameof(Source)); } } /// public string? Context { get => _context; set { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException(nameof(value)); } SetPropertyValueAndDetectChanges(value, ref _context, nameof(Context)); } } /// public string? Action { get => _action; set { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException(nameof(value)); } SetPropertyValueAndDetectChanges(value, ref _action, nameof(Action)); } } /// public ConsentState State { get => _state; // note: we probably should validate the state here, but since the // enum is [Flags] with many combinations, this could be expensive set => SetPropertyValueAndDetectChanges(value, ref _state, nameof(State)); } /// public string? Comment { get => _comment; set => SetPropertyValueAndDetectChanges(value, ref _comment, nameof(Comment)); } /// public IEnumerable? History => HistoryInternal; }