This commit is contained in:
sam 2024-05-27 15:53:54 +02:00
commit f4c0a40259
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
27 changed files with 2188 additions and 0 deletions

View file

@ -0,0 +1,23 @@
namespace Foxnouns.Backend.Database.Models;
public class AuthMethod : BaseModel
{
public required AuthType AuthType { get; init; }
public required string RemoteId { get; init; }
public string? RemoteUsername { get; set; }
public Snowflake UserId { get; init; }
public User User { get; init; } = null!;
public Snowflake? FediverseApplicationId { get; init; }
public FediverseApplication? FediverseApplication { get; init; }
}
public enum AuthType
{
Discord,
Google,
Tumblr,
Fediverse,
Email,
}

View file

@ -0,0 +1,15 @@
namespace Foxnouns.Backend.Database.Models;
public class FediverseApplication : BaseModel
{
public required string Domain { get; init; }
public required string ClientId { get; set; }
public required string ClientSecret { get; set; }
public required FediverseInstanceType InstanceType { get; set; }
}
public enum FediverseInstanceType
{
MastodonApi,
MisskeyApi
}

View file

@ -0,0 +1,18 @@
namespace Foxnouns.Backend.Database.Models;
public class Field
{
public required string Name { get; set; }
public FieldEntry[] Entries { get; set; } = [];
}
public class FieldEntry
{
public required string Value { get; set; }
public required string Status { get; set; }
}
public class Pronoun : FieldEntry
{
public string? DisplayText { get; set; }
}

View file

@ -0,0 +1,18 @@
namespace Foxnouns.Backend.Database.Models;
public class Member : BaseModel
{
public required string Name { get; set; }
public string? DisplayName { get; set; }
public string? Bio { get; set; }
public string? Avatar { get; set; }
public string[] Links { get; set; } = [];
public bool Unlisted { get; set; }
public List<FieldEntry> Names { get; set; } = [];
public List<Pronoun> Pronouns { get; set; } = [];
public List<Field> Fields { get; set; } = [];
public Snowflake UserId { get; init; }
public User User { get; init; } = null!;
}

View file

@ -0,0 +1,15 @@
using NodaTime;
namespace Foxnouns.Backend.Database.Models;
public class Token : BaseModel
{
public required Instant ExpiresAt { get; init; }
public required string[] Scopes { get; init; }
public bool ManuallyExpired { get; set; }
public bool IsExpired => ManuallyExpired || ExpiresAt < SystemClock.Instance.GetCurrentInstant();
public Snowflake UserId { get; init; }
public User User { get; init; } = null!;
}

View file

@ -0,0 +1,27 @@
namespace Foxnouns.Backend.Database.Models;
public class User : BaseModel
{
public required string Username { get; set; }
public string? DisplayName { get; set; }
public string? Bio { get; set; }
public string? MemberTitle { get; set; }
public string? Avatar { get; set; }
public string[] Links { get; set; } = [];
public List<FieldEntry> Names { get; set; } = [];
public List<Pronoun> Pronouns { get; set; } = [];
public List<Field> Fields { get; set; } = [];
public UserRole Role { get; set; } = UserRole.User;
public List<Member> Members { get; } = [];
public List<AuthMethod> AuthMethods { get; } = [];
}
public enum UserRole
{
User,
Moderator,
Admin,
}