using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Text; namespace UserService.DatabaseLayer.DataModels { public class OrganizationUnit : Node { public Member? Manager { get; set; } } public class SecurityGroup : Member { } public class User : Member { public string? FirstName { get; set; } public string? LastName { get; set; } public bool IsActive { get; set; } public string FullName => $"{FirstName} {LastName}"; public IEnumerable MemberOf { get; set; } = new List(); } public class UserMember { public int MemberId { get; set; } public Member? Member { get; set; } public int UserId { get; set; } public User? User { get; set; } } public abstract class Member : Node { [EmailAddress] public string? EMail { get; set; } public ICollection Members { get; set; } = new List(); } public abstract class Node : ICloneable { public int Id { get; set; } [Required] public string CommonName { get; set; } = null!; public string? Description { get; set; } public ICollection Children { get; set; } = new List(); public Node? Parent { get; set; } //Parent public int? ParentId { get; set; } public override string ToString() => $"[{GetType().Name}] {Id:D5} {CommonName}"; public int Level => Parent?.Level + 1 ?? 0; /// public virtual object Clone() => MemberwiseClone(); } }