using Contracts.BindingModels; using Contracts.SearchModels; using Contracts.ViewModels; using DataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DatabaseImplement.Models { public class User : IUser { public Guid Id { get; set; } [Required] public string FirstName { get; set; } = string.Empty; [Required] public string SecondName { get; set; } = string.Empty; [Required] public string PasswordHash { get; set; } = string.Empty; [Required] public string Email { get; set; } = string.Empty; [Required] public DateTime Birthday { get; set; } public Role? Role { get; set; } public UserBindingModel GetBindingModel() => new() { Id = Id, FirstName = FirstName, SecondName = SecondName, Email = Email, PasswordHash = PasswordHash, Birthday = Birthday, Role = Role?.GetBindingModel() ?? new() }; public static User ToUserFromView(UserViewModel model) => new() { Id = model.Id, FirstName = model.FirstName, SecondName = model.SecondName, Email = model.Email, Birthday = model.Birthday, Role = Models.Role.ToRoleFromView(model.Role) }; public static User ToUserFromBinding(UserBindingModel model) => new() { Id = model.Id, FirstName = model.FirstName, SecondName = model.SecondName, Email = model.Email, PasswordHash = model.PasswordHash, Birthday = model.Birthday, Role = Models.Role.ToRoleFromBinding(model.Role) }; public void Update(UserBindingModel model) { if (model is null) { throw new ArgumentNullException("Update user: binding model is null"); } Email = model.Email; FirstName = model.FirstName; SecondName = model.SecondName; PasswordHash = model.PasswordHash; Birthday = model.Birthday; Role = Models.Role.ToRoleFromBinding(model.Role); } public bool Equals(UserSearchModel model) { if (model.Id is null) { return Email.Contains(model.Email!); } if (string.IsNullOrWhiteSpace(model.Email)) { return Id == model.Id; } return false; } } }