Files
Swarm/DysonNetwork.Pass/Features/Auth/Models/Account.cs

81 lines
2.4 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
using DysonNetwork.Common.Models;
using NodaTime;
namespace DysonNetwork.Pass.Features.Auth.Models;
[Index(nameof(Email), IsUnique = true)]
public class Account : ModelBase
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[MaxLength(256)]
public string Email { get; set; } = string.Empty;
[Required]
[MaxLength(256)]
public string Name { get; set; } = string.Empty;
[MaxLength(32)]
public string? Status { get; set; }
[Required]
public Instant CreatedAt { get; set; } = SystemClock.Instance.GetCurrentInstant();
[Required]
public Instant UpdatedAt { get; set; } = SystemClock.Instance.GetCurrentInstant();
// Navigation properties
[JsonIgnore]
public virtual ICollection<AuthSession> Sessions { get; set; } = new List<AuthSession>();
[JsonIgnore]
public virtual ICollection<AuthChallenge> Challenges { get; set; } = new List<AuthChallenge>();
[JsonIgnore]
public virtual ICollection<AccountAuthFactor> AuthFactors { get; set; } = new List<AccountAuthFactor>();
[JsonIgnore]
public virtual ICollection<AccountConnection> Connections { get; set; } = new List<AccountConnection>();
public void UpdateTimestamp()
{
UpdatedAt = SystemClock.Instance.GetCurrentInstant();
}
public static Account FromCommonModel(DysonNetwork.Common.Models.Account commonAccount)
{
return new Account
{
Id = Guid.Parse(commonAccount.Id),
Email = commonAccount.Profile?.Email ?? string.Empty,
Name = commonAccount.Name,
Status = commonAccount.Status,
CreatedAt = commonAccount.CreatedAt,
UpdatedAt = commonAccount.UpdatedAt
};
}
public DysonNetwork.Common.Models.Account ToCommonModel()
{
return new DysonNetwork.Common.Models.Account
{
Id = Id.ToString(),
Name = Name,
Status = Status,
CreatedAt = CreatedAt,
UpdatedAt = UpdatedAt,
Profile = new DysonNetwork.Common.Models.Profile
{
Email = Email,
DisplayName = Name
}
};
}
}