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) { ArgumentException.ThrowIfNullOrEmpty(name); Name = name; Id = Guid.NewGuid(); Permissions = new HashSet(); Preferences = new HashSet(); } /// /// Gets the id of this group. /// /// /// Identity, Indexed, Required. /// public Guid Id { get; private set; } /// /// Gets or sets the group's name. /// /// /// Required, Max length = 255. /// [MaxLength(255)] [StringLength(255)] public string Name { get; set; } /// [ConcurrencyCheck] public uint RowVersion { get; private set; } /// /// Gets a collection containing the group's permissions. /// public virtual ICollection Permissions { get; private set; } /// /// Gets a collection containing the group's preferences. /// public virtual ICollection Preferences { get; private 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++; } } }