2022-02-24 12:00:28 +00:00
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
2022-02-21 22:35:06 +00:00
|
|
|
namespace VoidCat.Model;
|
|
|
|
|
2022-02-24 12:00:28 +00:00
|
|
|
public abstract class VoidUser
|
|
|
|
{
|
2022-02-27 13:54:25 +00:00
|
|
|
protected VoidUser(Guid id)
|
2022-02-24 12:00:28 +00:00
|
|
|
{
|
|
|
|
Id = id;
|
|
|
|
}
|
|
|
|
|
|
|
|
[JsonConverter(typeof(Base58GuidConverter))]
|
|
|
|
public Guid Id { get; }
|
|
|
|
|
2022-02-27 13:54:25 +00:00
|
|
|
public HashSet<string> Roles { get; init; } = new() {Model.Roles.User};
|
2022-02-24 12:00:28 +00:00
|
|
|
|
|
|
|
public DateTimeOffset Created { get; init; }
|
|
|
|
|
|
|
|
public DateTimeOffset LastLogin { get; set; }
|
2022-02-27 13:54:25 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Display avatar for user profile
|
|
|
|
/// </summary>
|
2022-02-24 23:05:33 +00:00
|
|
|
public string? Avatar { get; set; }
|
2022-02-27 13:54:25 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Display name for user profile
|
|
|
|
/// </summary>
|
|
|
|
public string? DisplayName { get; set; } = "void user";
|
|
|
|
|
|
|
|
/// <summary>
|
2022-02-27 23:01:57 +00:00
|
|
|
/// Profile flags
|
2022-02-27 13:54:25 +00:00
|
|
|
/// </summary>
|
2022-02-27 23:01:57 +00:00
|
|
|
public VoidUserFlags Flags { get; set; } = VoidUserFlags.PublicProfile;
|
|
|
|
|
2022-02-24 23:05:33 +00:00
|
|
|
public PublicVoidUser ToPublic()
|
|
|
|
{
|
2022-02-27 13:54:25 +00:00
|
|
|
return new(Id)
|
2022-02-24 23:05:33 +00:00
|
|
|
{
|
|
|
|
Roles = Roles,
|
|
|
|
Created = Created,
|
|
|
|
LastLogin = LastLogin,
|
|
|
|
Avatar = Avatar
|
|
|
|
};
|
|
|
|
}
|
2022-02-24 12:00:28 +00:00
|
|
|
}
|
|
|
|
|
2022-02-27 13:54:25 +00:00
|
|
|
public sealed class InternalVoidUser : PrivateVoidUser
|
2022-02-21 22:35:06 +00:00
|
|
|
{
|
2022-02-27 13:54:25 +00:00
|
|
|
public InternalVoidUser(Guid id, string email, string passwordHash) : base(id, email)
|
2022-02-24 12:00:28 +00:00
|
|
|
{
|
|
|
|
PasswordHash = passwordHash;
|
|
|
|
}
|
|
|
|
|
|
|
|
public string PasswordHash { get; }
|
2022-02-21 22:35:06 +00:00
|
|
|
}
|
2022-02-24 12:00:28 +00:00
|
|
|
|
2022-02-27 13:54:25 +00:00
|
|
|
public class PrivateVoidUser : VoidUser
|
|
|
|
{
|
|
|
|
public PrivateVoidUser(Guid id, string email) : base(id)
|
|
|
|
{
|
|
|
|
Email = email;
|
|
|
|
}
|
|
|
|
|
|
|
|
public string Email { get; }
|
|
|
|
}
|
|
|
|
|
2022-02-24 12:00:28 +00:00
|
|
|
public sealed class PublicVoidUser : VoidUser
|
|
|
|
{
|
2022-02-27 13:54:25 +00:00
|
|
|
public PublicVoidUser(Guid id) : base(id)
|
2022-02-24 12:00:28 +00:00
|
|
|
{
|
|
|
|
}
|
2022-02-27 13:54:25 +00:00
|
|
|
}
|
2022-02-27 23:01:57 +00:00
|
|
|
|
|
|
|
[Flags]
|
|
|
|
public enum VoidUserFlags
|
|
|
|
{
|
|
|
|
PublicProfile = 1,
|
2022-03-02 11:37:15 +00:00
|
|
|
PublicUploads = 2,
|
|
|
|
EmailVerified = 4
|
2022-02-27 23:01:57 +00:00
|
|
|
}
|