using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Jellyfin.Data.Enums; using Jellyfin.Data.Interfaces; namespace Jellyfin.Data.Entities { /// /// An entity representing a group. /// public class Group : IHasPermissions, IHasConcurrencyToken { /// /// Initializes a new instance of the class. /// /// The name of the group. public Group(string name) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(nameof(name)); } Name = name; Id = Guid.NewGuid(); Permissions = new HashSet(); Preferences = new HashSet(); } /// /// Initializes a new instance of the class. /// /// /// Default constructor. Protected due to required properties, but present because EF needs it. /// protected Group() { } /// /// Gets or sets the id of this group. /// /// /// Identity, Indexed, Required. /// public Guid Id { get; protected set; } /// /// Gets or sets the group's name. /// /// /// Required, Max length = 255. /// [Required] [MaxLength(255)] [StringLength(255)] public string Name { get; set; } /// [ConcurrencyCheck] public uint RowVersion { get; set; } /// /// Gets or sets a collection containing the group's permissions. /// public virtual ICollection Permissions { get; protected set; } /// /// Gets or sets a collection containing the group's preferences. /// public virtual ICollection Preferences { get; protected set; } /// public bool HasPermission(PermissionKind kind) { return Permissions.First(p => p.Kind == kind).Value; } /// public void SetPermission(PermissionKind kind, bool value) { Permissions.First(p => p.Kind == kind).Value = value; } /// public void OnSavingChanges() { RowVersion++; } } }