using DAL.Models.Audits; using DAL.Values; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; namespace DAL.Models { [JsonConverter(typeof(JsonStringEnumConverter))] public enum HashingType { PBKDF2_SHA512_64_250000 } [Table("users")] [Index("updater", Name = "users_users_id_fk")] [Index("permissionId", Name = "users_permissions_id_fk")] public class User : Model { [Column("firstName")] [MaxLength(64)] public string firstName { get; set; } = null!; [Column("lastName")] [MaxLength(64)] public string lastName { get; set; } = null!; [Column("phoneNumber")] public PhoneNumber phoneNumber { get; set; } = null!; [Column("password")] [MaxLength(2048)] public string password { get; set; } = null!; [Column("salt")] [DataType("blob")] public byte[] salt { get; set; } = null!; [Column("hashingType")] [MaxLength(64)] public HashingType hashingType { get; set; } [Column("permissionId")] public ulong permissionId { get; set; } [Column("updater")] public new ulong? updater { get; set; } public new User? updaterRelation { get; set; } = null!; public override AuditUser adaptToAudit() { return new AuditUser { id = id, firstName = firstName, lastName = lastName, phoneNumber = phoneNumber, hashingType = hashingType, permissionId = permissionId }; } public override void updateModel(ref User dest) { dest.firstName = firstName; dest.lastName = lastName; dest.phoneNumber = phoneNumber; dest.password = password; dest.salt = salt; dest.hashingType = hashingType; dest.permissionId = permissionId; } } }