Compare commits
	
		
			6 commits
		
	
	
		
			6ea8861da2
			...
			39b0917585
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 39b0917585 | |||
| e83895255e | |||
| b5f9ef9bd6 | |||
| e76c634738 | |||
| e7e4937082 | |||
| df93f28273 | 
					 33 changed files with 372 additions and 4373 deletions
				
			
		| 
						 | 
					@ -9,6 +9,7 @@ using Foxnouns.Backend.Services;
 | 
				
			||||||
using Foxnouns.Backend.Utils;
 | 
					using Foxnouns.Backend.Utils;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					using Microsoft.EntityFrameworkCore;
 | 
				
			||||||
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxnouns.Backend.Controllers;
 | 
					namespace Foxnouns.Backend.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +20,8 @@ public class MembersController(
 | 
				
			||||||
    MemberRendererService memberRenderer,
 | 
					    MemberRendererService memberRenderer,
 | 
				
			||||||
    ISnowflakeGenerator snowflakeGenerator,
 | 
					    ISnowflakeGenerator snowflakeGenerator,
 | 
				
			||||||
    ObjectStorageService objectStorageService,
 | 
					    ObjectStorageService objectStorageService,
 | 
				
			||||||
    IQueue queue) : ApiControllerBase
 | 
					    IQueue queue,
 | 
				
			||||||
 | 
					    IClock clock) : ApiControllerBase
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly ILogger _logger = logger.ForContext<MembersController>();
 | 
					    private readonly ILogger _logger = logger.ForContext<MembersController>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,9 +52,9 @@ public class MembersController(
 | 
				
			||||||
            ("display_name", ValidationUtils.ValidateDisplayName(req.DisplayName)),
 | 
					            ("display_name", ValidationUtils.ValidateDisplayName(req.DisplayName)),
 | 
				
			||||||
            ("bio", ValidationUtils.ValidateBio(req.Bio)),
 | 
					            ("bio", ValidationUtils.ValidateBio(req.Bio)),
 | 
				
			||||||
            ("avatar", ValidationUtils.ValidateAvatar(req.Avatar)),
 | 
					            ("avatar", ValidationUtils.ValidateAvatar(req.Avatar)),
 | 
				
			||||||
            ..ValidationUtils.ValidateFields(req.Fields, CurrentUser!.CustomPreferences),
 | 
					            .. ValidationUtils.ValidateFields(req.Fields, CurrentUser!.CustomPreferences),
 | 
				
			||||||
            ..ValidationUtils.ValidateFieldEntries(req.Names?.ToArray(), CurrentUser!.CustomPreferences, "names"),
 | 
					            .. ValidationUtils.ValidateFieldEntries(req.Names?.ToArray(), CurrentUser!.CustomPreferences, "names"),
 | 
				
			||||||
            ..ValidationUtils.ValidatePronouns(req.Pronouns?.ToArray(), CurrentUser!.CustomPreferences)
 | 
					            .. ValidationUtils.ValidatePronouns(req.Pronouns?.ToArray(), CurrentUser!.CustomPreferences)
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var member = new Member
 | 
					        var member = new Member
 | 
				
			||||||
| 
						 | 
					@ -114,4 +116,30 @@ public class MembersController(
 | 
				
			||||||
        List<FieldEntry>? Names,
 | 
					        List<FieldEntry>? Names,
 | 
				
			||||||
        List<Pronoun>? Pronouns,
 | 
					        List<Pronoun>? Pronouns,
 | 
				
			||||||
        List<Field>? Fields);
 | 
					        List<Field>? Fields);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost("/api/v2/users/@me/members/{memberRef}/reroll-sid")]
 | 
				
			||||||
 | 
					    [Authorize("member.update")]
 | 
				
			||||||
 | 
					    [ProducesResponseType<UserRendererService.UserResponse>(statusCode: StatusCodes.Status200OK)]
 | 
				
			||||||
 | 
					    public async Task<IActionResult> RerollSidAsync(string memberRef)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var member = await db.ResolveMemberAsync(CurrentUser!.Id, memberRef);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var minTimeAgo = clock.GetCurrentInstant() - Duration.FromHours(1);
 | 
				
			||||||
 | 
					        if (CurrentUser!.LastSidReroll > minTimeAgo)
 | 
				
			||||||
 | 
					            throw new ApiError.BadRequest("Cannot reroll short ID yet");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Using ExecuteUpdateAsync here as the new short ID is generated by the database
 | 
				
			||||||
 | 
					        await db.Members.Where(m => m.Id == member.Id)
 | 
				
			||||||
 | 
					            .ExecuteUpdateAsync(s => s
 | 
				
			||||||
 | 
					                .SetProperty(m => m.Sid, _ => db.FindFreeMemberSid()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await db.Users.Where(u => u.Id == CurrentUser.Id)
 | 
				
			||||||
 | 
					            .ExecuteUpdateAsync(s => s
 | 
				
			||||||
 | 
					                .SetProperty(u => u.LastSidReroll, clock.GetCurrentInstant())
 | 
				
			||||||
 | 
					                .SetProperty(u => u.LastActive, clock.GetCurrentInstant()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Re-fetch member to fetch the new sid
 | 
				
			||||||
 | 
					        var updatedMember = await db.ResolveMemberAsync(CurrentUser!.Id, memberRef);
 | 
				
			||||||
 | 
					        return Ok(memberRenderer.RenderMember(updatedMember, CurrentToken));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ using Foxnouns.Backend.Services;
 | 
				
			||||||
using Foxnouns.Backend.Utils;
 | 
					using Foxnouns.Backend.Utils;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					using Microsoft.EntityFrameworkCore;
 | 
				
			||||||
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxnouns.Backend.Controllers;
 | 
					namespace Foxnouns.Backend.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +17,8 @@ public class UsersController(
 | 
				
			||||||
    DatabaseContext db,
 | 
					    DatabaseContext db,
 | 
				
			||||||
    UserRendererService userRenderer,
 | 
					    UserRendererService userRenderer,
 | 
				
			||||||
    ISnowflakeGenerator snowflakeGenerator,
 | 
					    ISnowflakeGenerator snowflakeGenerator,
 | 
				
			||||||
    IQueue queue) : ApiControllerBase
 | 
					    IQueue queue,
 | 
				
			||||||
 | 
					    IClock clock) : ApiControllerBase
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [HttpGet("{userRef}")]
 | 
					    [HttpGet("{userRef}")]
 | 
				
			||||||
    [ProducesResponseType<UserRendererService.UserResponse>(statusCode: StatusCodes.Status200OK)]
 | 
					    [ProducesResponseType<UserRendererService.UserResponse>(statusCode: StatusCodes.Status200OK)]
 | 
				
			||||||
| 
						 | 
					@ -213,4 +215,24 @@ public class UsersController(
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public bool? DarkMode { get; init; }
 | 
					        public bool? DarkMode { get; init; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost("@me/reroll-sid")]
 | 
				
			||||||
 | 
					    [Authorize("user.update")]
 | 
				
			||||||
 | 
					    [ProducesResponseType<UserRendererService.UserResponse>(statusCode: StatusCodes.Status200OK)]
 | 
				
			||||||
 | 
					    public async Task<IActionResult> RerollSidAsync()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var minTimeAgo = clock.GetCurrentInstant() - Duration.FromHours(1);
 | 
				
			||||||
 | 
					        if (CurrentUser!.LastSidReroll > minTimeAgo)
 | 
				
			||||||
 | 
					            throw new ApiError.BadRequest("Cannot reroll short ID yet");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Using ExecuteUpdateAsync here as the new short ID is generated by the database
 | 
				
			||||||
 | 
					        await db.Users.Where(u => u.Id == CurrentUser.Id)
 | 
				
			||||||
 | 
					            .ExecuteUpdateAsync(s => s
 | 
				
			||||||
 | 
					                .SetProperty(u => u.Sid, _ => db.FindFreeUserSid())
 | 
				
			||||||
 | 
					                .SetProperty(u => u.LastSidReroll, clock.GetCurrentInstant())
 | 
				
			||||||
 | 
					                .SetProperty(u => u.LastActive, clock.GetCurrentInstant()));
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        var user = await db.ResolveUserAsync(CurrentUser.Id);
 | 
				
			||||||
 | 
					        return Ok(await userRenderer.RenderUserAsync(user, CurrentUser, CurrentToken, renderMembers: false));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -60,19 +60,39 @@ public class DatabaseContext : DbContext
 | 
				
			||||||
    protected override void OnModelCreating(ModelBuilder modelBuilder)
 | 
					    protected override void OnModelCreating(ModelBuilder modelBuilder)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        modelBuilder.Entity<User>().HasIndex(u => u.Username).IsUnique();
 | 
					        modelBuilder.Entity<User>().HasIndex(u => u.Username).IsUnique();
 | 
				
			||||||
 | 
					        modelBuilder.Entity<User>().HasIndex(u => u.Sid).IsUnique();
 | 
				
			||||||
        modelBuilder.Entity<Member>().HasIndex(m => new { m.UserId, m.Name }).IsUnique();
 | 
					        modelBuilder.Entity<Member>().HasIndex(m => new { m.UserId, m.Name }).IsUnique();
 | 
				
			||||||
 | 
					        modelBuilder.Entity<Member>().HasIndex(m => m.Sid).IsUnique();
 | 
				
			||||||
        modelBuilder.Entity<TemporaryKey>().HasIndex(k => k.Key).IsUnique();
 | 
					        modelBuilder.Entity<TemporaryKey>().HasIndex(k => k.Key).IsUnique();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        modelBuilder.Entity<User>().Property(u => u.Sid).HasDefaultValueSql("find_free_user_sid()");
 | 
				
			||||||
        modelBuilder.Entity<User>().Property(u => u.Fields).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<User>().Property(u => u.Fields).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<User>().Property(u => u.Names).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<User>().Property(u => u.Names).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<User>().Property(u => u.Pronouns).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<User>().Property(u => u.Pronouns).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<User>().Property(u => u.CustomPreferences).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<User>().Property(u => u.CustomPreferences).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<User>().Property(u => u.Settings).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<User>().Property(u => u.Settings).HasColumnType("jsonb");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        modelBuilder.Entity<Member>().Property(m => m.Sid).HasDefaultValueSql("find_free_member_sid()");
 | 
				
			||||||
        modelBuilder.Entity<Member>().Property(m => m.Fields).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<Member>().Property(m => m.Fields).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<Member>().Property(m => m.Names).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<Member>().Property(m => m.Names).HasColumnType("jsonb");
 | 
				
			||||||
        modelBuilder.Entity<Member>().Property(m => m.Pronouns).HasColumnType("jsonb");
 | 
					        modelBuilder.Entity<Member>().Property(m => m.Pronouns).HasColumnType("jsonb");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        modelBuilder.HasDbFunction(typeof(DatabaseContext).GetMethod(nameof(FindFreeUserSid))!)
 | 
				
			||||||
 | 
					            .HasName("find_free_user_sid");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        modelBuilder.HasDbFunction(typeof(DatabaseContext).GetMethod(nameof(FindFreeMemberSid))!)
 | 
				
			||||||
 | 
					            .HasName("find_free_member_sid");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Dummy method that calls <c>find_free_user_sid()</c> when used in an EF Core query.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public string FindFreeUserSid() => throw new NotSupportedException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Dummy method that calls <c>find_free_member_sid()</c> when used in an EF Core query.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public string FindFreeMemberSid() => throw new NotSupportedException();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[SuppressMessage("ReSharper", "UnusedType.Global", Justification = "Used by EF Core's migration generator")]
 | 
					[SuppressMessage("ReSharper", "UnusedType.Global", Justification = "Used by EF Core's migration generator")]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,412 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240527132444_Init")]
 | 
					 | 
				
			||||||
    partial class Init
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using NodaTime;
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
| 
						 | 
					@ -6,6 +7,8 @@ using NodaTime;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240527132444_Init")]
 | 
				
			||||||
    public partial class Init : Migration
 | 
					    public partial class Init : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,470 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240528125310_AddApplications")]
 | 
					 | 
				
			||||||
    partial class AddApplications
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240528125310_AddApplications")]
 | 
				
			||||||
    public partial class AddApplications : Migration
 | 
					    public partial class AddApplications : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,474 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240528145744_AddListHidden")]
 | 
					 | 
				
			||||||
    partial class AddListHidden
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240528145744_AddListHidden")]
 | 
				
			||||||
    public partial class AddListHidden : Migration
 | 
					    public partial class AddListHidden : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,478 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240604142522_AddPassword")]
 | 
					 | 
				
			||||||
    partial class AddPassword
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240604142522_AddPassword")]
 | 
				
			||||||
    public partial class AddPassword : Migration
 | 
					    public partial class AddPassword : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,511 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240611225328_AddTemporaryKeyCache")]
 | 
					 | 
				
			||||||
    partial class AddTemporaryKeyCache
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.TemporaryKey", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("Expires")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Key")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Value")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("value");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_temporary_keys");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Key")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_temporary_keys_key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("temporary_keys", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using NodaTime;
 | 
					using NodaTime;
 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +8,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240611225328_AddTemporaryKeyCache")]
 | 
				
			||||||
    public partial class AddTemporaryKeyCache : Migration
 | 
					    public partial class AddTemporaryKeyCache : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,515 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240712233806_AddUserLastActive")]
 | 
					 | 
				
			||||||
    partial class AddUserLastActive
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.TemporaryKey", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("Expires")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Key")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Value")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("value");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_temporary_keys");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Key")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_temporary_keys_key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("temporary_keys", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("LastActive")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("last_active");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using NodaTime;
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
| 
						 | 
					@ -6,6 +7,8 @@ using NodaTime;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240712233806_AddUserLastActive")]
 | 
				
			||||||
    public partial class AddUserLastActive : Migration
 | 
					    public partial class AddUserLastActive : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,528 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240713000719_AddDeleted")]
 | 
					 | 
				
			||||||
    partial class AddDeleted
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.5")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.TemporaryKey", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("Expires")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Key")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Value")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("value");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_temporary_keys");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Key")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_temporary_keys_key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("temporary_keys", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Deleted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant?>("DeletedAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("DeletedBy")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_by");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("LastActive")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("last_active");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using NodaTime;
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
| 
						 | 
					@ -6,6 +7,8 @@ using NodaTime;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240713000719_AddDeleted")]
 | 
				
			||||||
    public partial class AddDeleted : Migration
 | 
					    public partial class AddDeleted : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,535 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Collections.Generic;
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database.Models;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240821210355_AddCustomPreferences")]
 | 
					 | 
				
			||||||
    partial class AddCustomPreferences
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.7")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.TemporaryKey", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("Expires")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Key")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Value")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("value");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_temporary_keys");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Key")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_temporary_keys_key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("temporary_keys", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Dictionary<Guid, User.CustomPreference>>("CustomPreferences")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("custom_preferences");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Deleted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant?>("DeletedAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("DeletedBy")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_by");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("LastActive")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("last_active");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Field>", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.FieldEntry>", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("System.Collections.Generic.List<Foxnouns.Backend.Database.Models.Pronoun>", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("MemberId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("MemberId");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("MemberId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_members_members_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Fields#List", "Fields", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Names#List", "Names", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.OwnsOne("Foxnouns.Backend.Database.Models.User.Pronouns#List", "Pronouns", b1 =>
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            b1.Property<long>("UserId")
 | 
					 | 
				
			||||||
                                .HasColumnType("bigint");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.Property<int>("Capacity")
 | 
					 | 
				
			||||||
                                .HasColumnType("integer");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.HasKey("UserId")
 | 
					 | 
				
			||||||
                                .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToTable("users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.ToJson("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            b1.WithOwner()
 | 
					 | 
				
			||||||
                                .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                                .HasConstraintName("fk_users_users_user_id");
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Names")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired();
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using Foxnouns.Backend.Database.Models;
 | 
					using Foxnouns.Backend.Database.Models;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
| 
						 | 
					@ -8,6 +9,8 @@ using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240821210355_AddCustomPreferences")]
 | 
				
			||||||
    public partial class AddCustomPreferences : Migration
 | 
					    public partial class AddCustomPreferences : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,432 +0,0 @@
 | 
				
			||||||
// <auto-generated />
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Collections.Generic;
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database;
 | 
					 | 
				
			||||||
using Foxnouns.Backend.Database.Models;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
					 | 
				
			||||||
using NodaTime;
 | 
					 | 
				
			||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#nullable disable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [DbContext(typeof(DatabaseContext))]
 | 
					 | 
				
			||||||
    [Migration("20240905191709_AddUserSettings")]
 | 
					 | 
				
			||||||
    partial class AddUserSettings
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /// <inheritdoc />
 | 
					 | 
				
			||||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
#pragma warning disable 612, 618
 | 
					 | 
				
			||||||
            modelBuilder
 | 
					 | 
				
			||||||
                .HasAnnotation("ProductVersion", "8.0.7")
 | 
					 | 
				
			||||||
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Application", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("RedirectUris")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("redirect_uris");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("AuthType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("auth_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("RemoteUsername")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("remote_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_auth_methods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_auth_methods_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("auth_methods", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.FediverseApplication", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientId")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("ClientSecret")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("client_secret");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Domain")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("domain");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("InstanceType")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("instance_type");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_fediverse_applications");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("fediverse_applications", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<Field>>("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Name")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<FieldEntry>>("Names")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<Pronoun>>("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("members", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.TemporaryKey", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("Expires")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Key")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Value")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("value");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_temporary_keys");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Key")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_temporary_keys_key");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("temporary_keys", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("ExpiresAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("expires_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<byte[]>("Hash")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("bytea")
 | 
					 | 
				
			||||||
                        .HasColumnName("hash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ManuallyExpired")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("manually_expired");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Scopes")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("scopes");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long>("UserId")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_tokens");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ApplicationId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("UserId")
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_tokens_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("tokens", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<long>("Id")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Avatar")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("avatar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Bio")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("bio");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Dictionary<Snowflake, User.CustomPreference>>("CustomPreferences")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("custom_preferences");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("Deleted")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant?>("DeletedAt")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_at");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<long?>("DeletedBy")
 | 
					 | 
				
			||||||
                        .HasColumnType("bigint")
 | 
					 | 
				
			||||||
                        .HasColumnName("deleted_by");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("DisplayName")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("display_name");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<Field>>("Fields")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("fields");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<Instant>("LastActive")
 | 
					 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					 | 
				
			||||||
                        .HasColumnName("last_active");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					 | 
				
			||||||
                        .HasColumnName("links");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<bool>("ListHidden")
 | 
					 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					 | 
				
			||||||
                        .HasColumnName("list_hidden");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("MemberTitle")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("member_title");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<FieldEntry>>("Names")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("names");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Password")
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("password");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<List<Pronoun>>("Pronouns")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("pronouns");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<int>("Role")
 | 
					 | 
				
			||||||
                        .HasColumnType("integer")
 | 
					 | 
				
			||||||
                        .HasColumnName("role");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<UserSettings>("Settings")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					 | 
				
			||||||
                        .HasColumnName("settings");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasColumnType("text")
 | 
					 | 
				
			||||||
                        .HasColumnName("username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id")
 | 
					 | 
				
			||||||
                        .HasName("pk_users");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					 | 
				
			||||||
                        .IsUnique()
 | 
					 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("users", (string)null);
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuthMethod", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.FediverseApplication", "FediverseApplication")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("FediverseApplicationId")
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_fediverse_applications_fediverse_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("AuthMethods")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_auth_methods_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("FediverseApplication");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Member", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany("Members")
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_members_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.Token", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.Application", "Application")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("ApplicationId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_applications_application_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasOne("Foxnouns.Backend.Database.Models.User", "User")
 | 
					 | 
				
			||||||
                        .WithMany()
 | 
					 | 
				
			||||||
                        .HasForeignKey("UserId")
 | 
					 | 
				
			||||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
					 | 
				
			||||||
                        .IsRequired()
 | 
					 | 
				
			||||||
                        .HasConstraintName("fk_tokens_users_user_id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Application");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("User");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Navigation("AuthMethods");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("Members");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
#pragma warning restore 612, 618
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
using Foxnouns.Backend.Database.Models;
 | 
					using Foxnouns.Backend.Database.Models;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					#nullable disable
 | 
				
			||||||
| 
						 | 
					@ -6,6 +7,8 @@ using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
namespace Foxnouns.Backend.Database.Migrations
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <inheritdoc />
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240905191709_AddUserSettings")]
 | 
				
			||||||
    public partial class AddUserSettings : Migration
 | 
					    public partial class AddUserSettings : Migration
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										101
									
								
								Foxnouns.Backend/Database/Migrations/20240926124950_AddSids.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								Foxnouns.Backend/Database/Migrations/20240926124950_AddSids.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,101 @@
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240926124950_AddSids")]
 | 
				
			||||||
 | 
					    public partial class AddSids : Migration
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// <inheritdoc />
 | 
				
			||||||
 | 
					        protected override void Up(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.AddColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "users",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AddColumn<Instant>(
 | 
				
			||||||
 | 
					                name: "last_sid_reroll",
 | 
				
			||||||
 | 
					                table: "users",
 | 
				
			||||||
 | 
					                type: "timestamp with time zone",
 | 
				
			||||||
 | 
					                nullable: false,
 | 
				
			||||||
 | 
					                defaultValueSql: "now() - '1 hour'::interval");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AddColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "members",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.CreateIndex(
 | 
				
			||||||
 | 
					                name: "ix_users_sid",
 | 
				
			||||||
 | 
					                table: "users",
 | 
				
			||||||
 | 
					                column: "sid",
 | 
				
			||||||
 | 
					                unique: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.CreateIndex(
 | 
				
			||||||
 | 
					                name: "ix_members_sid",
 | 
				
			||||||
 | 
					                table: "members",
 | 
				
			||||||
 | 
					                column: "sid",
 | 
				
			||||||
 | 
					                unique: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.Sql(@"create function generate_sid(len int) returns text as $$
 | 
				
			||||||
 | 
					    select string_agg(substr('abcdefghijklmnopqrstuvwxyz', ceil(random() * 26)::integer, 1), '') from generate_series(1, len)
 | 
				
			||||||
 | 
					$$ language sql volatile;
 | 
				
			||||||
 | 
					");
 | 
				
			||||||
 | 
					            migrationBuilder.Sql(@"create function find_free_user_sid() returns text as $$
 | 
				
			||||||
 | 
					declare new_sid text;
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					    loop
 | 
				
			||||||
 | 
					        new_sid := generate_sid(5);
 | 
				
			||||||
 | 
					        if not exists (select 1 from users where sid = new_sid) then return new_sid; end if;
 | 
				
			||||||
 | 
					    end loop;
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					$$ language plpgsql volatile;
 | 
				
			||||||
 | 
					");
 | 
				
			||||||
 | 
					            migrationBuilder.Sql(@"create function find_free_member_sid() returns text as $$
 | 
				
			||||||
 | 
					declare new_sid text;
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					    loop
 | 
				
			||||||
 | 
					        new_sid := generate_sid(6);
 | 
				
			||||||
 | 
					        if not exists (select 1 from members where sid = new_sid) then return new_sid; end if;
 | 
				
			||||||
 | 
					    end loop;
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					$$ language plpgsql volatile;");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <inheritdoc />
 | 
				
			||||||
 | 
					        protected override void Down(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.Sql("drop function find_free_member_sid;");
 | 
				
			||||||
 | 
					            migrationBuilder.Sql("drop function find_free_user_sid;");
 | 
				
			||||||
 | 
					            migrationBuilder.Sql("drop function generate_sid;");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropIndex(
 | 
				
			||||||
 | 
					                name: "ix_users_sid",
 | 
				
			||||||
 | 
					                table: "users");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropIndex(
 | 
				
			||||||
 | 
					                name: "ix_members_sid",
 | 
				
			||||||
 | 
					                table: "members");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropColumn(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "users");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropColumn(
 | 
				
			||||||
 | 
					                name: "last_sid_reroll",
 | 
				
			||||||
 | 
					                table: "users");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropColumn(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "members");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,60 @@
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
				
			||||||
 | 
					using NodaTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <inheritdoc />
 | 
				
			||||||
 | 
					    [DbContext(typeof(DatabaseContext))]
 | 
				
			||||||
 | 
					    [Migration("20240926130208_NonNullableSids")]
 | 
				
			||||||
 | 
					    public partial class NonNullableSids : Migration
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// <inheritdoc />
 | 
				
			||||||
 | 
					        protected override void Up(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.AlterColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "users",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: false,
 | 
				
			||||||
 | 
					                defaultValueSql: "find_free_user_sid()",
 | 
				
			||||||
 | 
					                oldClrType: typeof(string),
 | 
				
			||||||
 | 
					                oldType: "text",
 | 
				
			||||||
 | 
					                oldNullable: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AlterColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "members",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: false,
 | 
				
			||||||
 | 
					                defaultValueSql: "find_free_member_sid()",
 | 
				
			||||||
 | 
					                oldClrType: typeof(string),
 | 
				
			||||||
 | 
					                oldType: "text",
 | 
				
			||||||
 | 
					                oldNullable: true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <inheritdoc />
 | 
				
			||||||
 | 
					        protected override void Down(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.AlterColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "users",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: true,
 | 
				
			||||||
 | 
					                oldClrType: typeof(string),
 | 
				
			||||||
 | 
					                oldType: "text",
 | 
				
			||||||
 | 
					                oldDefaultValueSql: "find_free_user_sid()");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AlterColumn<string>(
 | 
				
			||||||
 | 
					                name: "sid",
 | 
				
			||||||
 | 
					                table: "members",
 | 
				
			||||||
 | 
					                type: "text",
 | 
				
			||||||
 | 
					                nullable: true,
 | 
				
			||||||
 | 
					                oldClrType: typeof(string),
 | 
				
			||||||
 | 
					                oldType: "text",
 | 
				
			||||||
 | 
					                oldDefaultValueSql: "find_free_member_sid()");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -175,6 +175,13 @@ namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					                        .HasColumnType("jsonb")
 | 
				
			||||||
                        .HasColumnName("pronouns");
 | 
					                        .HasColumnName("pronouns");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<string>("Sid")
 | 
				
			||||||
 | 
					                        .IsRequired()
 | 
				
			||||||
 | 
					                        .ValueGeneratedOnAdd()
 | 
				
			||||||
 | 
					                        .HasColumnType("text")
 | 
				
			||||||
 | 
					                        .HasColumnName("sid")
 | 
				
			||||||
 | 
					                        .HasDefaultValueSql("find_free_member_sid()");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Property<bool>("Unlisted")
 | 
					                    b.Property<bool>("Unlisted")
 | 
				
			||||||
                        .HasColumnType("boolean")
 | 
					                        .HasColumnType("boolean")
 | 
				
			||||||
                        .HasColumnName("unlisted");
 | 
					                        .HasColumnName("unlisted");
 | 
				
			||||||
| 
						 | 
					@ -186,6 +193,10 @@ namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
                    b.HasKey("Id")
 | 
					                    b.HasKey("Id")
 | 
				
			||||||
                        .HasName("pk_members");
 | 
					                        .HasName("pk_members");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.HasIndex("Sid")
 | 
				
			||||||
 | 
					                        .IsUnique()
 | 
				
			||||||
 | 
					                        .HasDatabaseName("ix_members_sid");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.HasIndex("UserId", "Name")
 | 
					                    b.HasIndex("UserId", "Name")
 | 
				
			||||||
                        .IsUnique()
 | 
					                        .IsUnique()
 | 
				
			||||||
                        .HasDatabaseName("ix_members_user_id_name");
 | 
					                        .HasDatabaseName("ix_members_user_id_name");
 | 
				
			||||||
| 
						 | 
					@ -314,6 +325,10 @@ namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
                        .HasColumnType("timestamp with time zone")
 | 
					                        .HasColumnType("timestamp with time zone")
 | 
				
			||||||
                        .HasColumnName("last_active");
 | 
					                        .HasColumnName("last_active");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<Instant>("LastSidReroll")
 | 
				
			||||||
 | 
					                        .HasColumnType("timestamp with time zone")
 | 
				
			||||||
 | 
					                        .HasColumnName("last_sid_reroll");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Property<string[]>("Links")
 | 
					                    b.Property<string[]>("Links")
 | 
				
			||||||
                        .IsRequired()
 | 
					                        .IsRequired()
 | 
				
			||||||
                        .HasColumnType("text[]")
 | 
					                        .HasColumnType("text[]")
 | 
				
			||||||
| 
						 | 
					@ -350,6 +365,13 @@ namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
                        .HasColumnType("jsonb")
 | 
					                        .HasColumnType("jsonb")
 | 
				
			||||||
                        .HasColumnName("settings");
 | 
					                        .HasColumnName("settings");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<string>("Sid")
 | 
				
			||||||
 | 
					                        .IsRequired()
 | 
				
			||||||
 | 
					                        .ValueGeneratedOnAdd()
 | 
				
			||||||
 | 
					                        .HasColumnType("text")
 | 
				
			||||||
 | 
					                        .HasColumnName("sid")
 | 
				
			||||||
 | 
					                        .HasDefaultValueSql("find_free_user_sid()");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Property<string>("Username")
 | 
					                    b.Property<string>("Username")
 | 
				
			||||||
                        .IsRequired()
 | 
					                        .IsRequired()
 | 
				
			||||||
                        .HasColumnType("text")
 | 
					                        .HasColumnType("text")
 | 
				
			||||||
| 
						 | 
					@ -358,6 +380,10 @@ namespace Foxnouns.Backend.Database.Migrations
 | 
				
			||||||
                    b.HasKey("Id")
 | 
					                    b.HasKey("Id")
 | 
				
			||||||
                        .HasName("pk_users");
 | 
					                        .HasName("pk_users");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.HasIndex("Sid")
 | 
				
			||||||
 | 
					                        .IsUnique()
 | 
				
			||||||
 | 
					                        .HasDatabaseName("ix_users_sid");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.HasIndex("Username")
 | 
					                    b.HasIndex("Username")
 | 
				
			||||||
                        .IsUnique()
 | 
					                        .IsUnique()
 | 
				
			||||||
                        .HasDatabaseName("ix_users_username");
 | 
					                        .HasDatabaseName("ix_users_username");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@ namespace Foxnouns.Backend.Database.Models;
 | 
				
			||||||
public class Member : BaseModel
 | 
					public class Member : BaseModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public required string Name { get; set; }
 | 
					    public required string Name { get; set; }
 | 
				
			||||||
 | 
					    public string Sid { get; set; } = string.Empty;
 | 
				
			||||||
    public string? DisplayName { get; set; }
 | 
					    public string? DisplayName { get; set; }
 | 
				
			||||||
    public string? Bio { get; set; }
 | 
					    public string? Bio { get; set; }
 | 
				
			||||||
    public string? Avatar { get; set; }
 | 
					    public string? Avatar { get; set; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ namespace Foxnouns.Backend.Database.Models;
 | 
				
			||||||
public class User : BaseModel
 | 
					public class User : BaseModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public required string Username { get; set; }
 | 
					    public required string Username { get; set; }
 | 
				
			||||||
 | 
					    public string Sid { get; set; } = string.Empty;
 | 
				
			||||||
    public string? DisplayName { get; set; }
 | 
					    public string? DisplayName { get; set; }
 | 
				
			||||||
    public string? Bio { get; set; }
 | 
					    public string? Bio { get; set; }
 | 
				
			||||||
    public string? MemberTitle { get; set; }
 | 
					    public string? MemberTitle { get; set; }
 | 
				
			||||||
| 
						 | 
					@ -28,6 +29,7 @@ public class User : BaseModel
 | 
				
			||||||
    public UserSettings Settings { get; set; } = new();
 | 
					    public UserSettings Settings { get; set; } = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public required Instant LastActive { get; set; }
 | 
					    public required Instant LastActive { get; set; }
 | 
				
			||||||
 | 
					    public Instant LastSidReroll { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public bool Deleted { get; set; }
 | 
					    public bool Deleted { get; set; }
 | 
				
			||||||
    public Instant? DeletedAt { get; set; }
 | 
					    public Instant? DeletedAt { get; set; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								Foxnouns.Backend/Database/prune-designer-cs-files.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Foxnouns.Backend/Database/prune-designer-cs-files.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Original script by zotan for Iceshrimp.NET
 | 
				
			||||||
 | 
					# Source: https://iceshrimp.dev/iceshrimp/Iceshrimp.NET/src/commit/7c93dcf79dda54fc1a4ea9772e3f80874e6bcefb/Iceshrimp.Backend/Core/Database/prune-designer-cs-files.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ $(uname) == "Darwin" ]]; then
 | 
				
			||||||
 | 
						SED="gsed"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						SED="sed"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import="using Microsoft.EntityFrameworkCore.Infrastructure;"
 | 
				
			||||||
 | 
					dbc="    [DbContext(typeof(DatabaseContext))]"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for file in $(find "$(dirname $0)/Migrations" -name '*.Designer.cs'); do
 | 
				
			||||||
 | 
						echo "$file"
 | 
				
			||||||
 | 
						csfile="${file%.Designer.cs}.cs"
 | 
				
			||||||
 | 
						if [[ ! -f $csfile ]]; then
 | 
				
			||||||
 | 
							echo "$csfile doesn't exist, exiting"
 | 
				
			||||||
 | 
							exit 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						lineno=$($SED -n '/^{/=' "$csfile")
 | 
				
			||||||
 | 
						((lineno+=2))
 | 
				
			||||||
 | 
						migr=$(grep "\[Migration" "$file")
 | 
				
			||||||
 | 
						$SED -i "${lineno}i \\$migr" "$csfile"
 | 
				
			||||||
 | 
						$SED -i "${lineno}i \\$dbc" "$csfile"
 | 
				
			||||||
 | 
						$SED -i "2i $import" "$csfile"
 | 
				
			||||||
 | 
						rm "$file"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
| 
						 | 
					@ -29,15 +29,15 @@ public class MemberRendererService(DatabaseContext db, Config config)
 | 
				
			||||||
        var renderUnlisted = token?.UserId == member.UserId && token.HasScope("user.read_hidden");
 | 
					        var renderUnlisted = token?.UserId == member.UserId && token.HasScope("user.read_hidden");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new MemberResponse(
 | 
					        return new MemberResponse(
 | 
				
			||||||
            member.Id, member.Name, member.DisplayName, member.Bio,
 | 
					            member.Id, member.Sid, member.Name, member.DisplayName, member.Bio,
 | 
				
			||||||
            AvatarUrlFor(member), member.Links, member.Names, member.Pronouns, member.Fields,
 | 
					            AvatarUrlFor(member), member.Links, member.Names, member.Pronouns, member.Fields,
 | 
				
			||||||
            RenderPartialUser(member.User), renderUnlisted ? member.Unlisted : null);
 | 
					            RenderPartialUser(member.User), renderUnlisted ? member.Unlisted : null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private UserRendererService.PartialUser RenderPartialUser(User user) =>
 | 
					    private UserRendererService.PartialUser RenderPartialUser(User user) =>
 | 
				
			||||||
        new(user.Id, user.Username, user.DisplayName, AvatarUrlFor(user), user.CustomPreferences);
 | 
					        new(user.Id, user.Sid, user.Username, user.DisplayName, AvatarUrlFor(user), user.CustomPreferences);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public PartialMember RenderPartialMember(Member member, bool renderUnlisted = false) => new(member.Id, member.Name,
 | 
					    public PartialMember RenderPartialMember(Member member, bool renderUnlisted = false) => new(member.Id, member.Sid, member.Name,
 | 
				
			||||||
        member.DisplayName, member.Bio, AvatarUrlFor(member), member.Names, member.Pronouns,
 | 
					        member.DisplayName, member.Bio, AvatarUrlFor(member), member.Names, member.Pronouns,
 | 
				
			||||||
        renderUnlisted ? member.Unlisted : null);
 | 
					        renderUnlisted ? member.Unlisted : null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,7 @@ public class MemberRendererService(DatabaseContext db, Config config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public record PartialMember(
 | 
					    public record PartialMember(
 | 
				
			||||||
        Snowflake Id,
 | 
					        Snowflake Id,
 | 
				
			||||||
 | 
					        string Sid,
 | 
				
			||||||
        string Name,
 | 
					        string Name,
 | 
				
			||||||
        string? DisplayName,
 | 
					        string? DisplayName,
 | 
				
			||||||
        string? Bio,
 | 
					        string? Bio,
 | 
				
			||||||
| 
						 | 
					@ -60,6 +61,7 @@ public class MemberRendererService(DatabaseContext db, Config config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public record MemberResponse(
 | 
					    public record MemberResponse(
 | 
				
			||||||
        Snowflake Id,
 | 
					        Snowflake Id,
 | 
				
			||||||
 | 
					        string Sid,
 | 
				
			||||||
        string Name,
 | 
					        string Name,
 | 
				
			||||||
        string? DisplayName,
 | 
					        string? DisplayName,
 | 
				
			||||||
        string? Bio,
 | 
					        string? Bio,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,8 @@ public class UserRendererService(DatabaseContext db, MemberRendererService membe
 | 
				
			||||||
            : [];
 | 
					            : [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new UserResponse(
 | 
					        return new UserResponse(
 | 
				
			||||||
            user.Id, user.Username, user.DisplayName, user.Bio, user.MemberTitle, AvatarUrlFor(user), user.Links,
 | 
					            user.Id, user.Sid, user.Username, user.DisplayName, user.Bio, user.MemberTitle, AvatarUrlFor(user),
 | 
				
			||||||
 | 
					            user.Links,
 | 
				
			||||||
            user.Names, user.Pronouns, user.Fields, user.CustomPreferences,
 | 
					            user.Names, user.Pronouns, user.Fields, user.CustomPreferences,
 | 
				
			||||||
            renderMembers ? members.Select(m => memberRenderer.RenderPartialMember(m, tokenHidden)) : null,
 | 
					            renderMembers ? members.Select(m => memberRenderer.RenderPartialMember(m, tokenHidden)) : null,
 | 
				
			||||||
            renderAuthMethods
 | 
					            renderAuthMethods
 | 
				
			||||||
| 
						 | 
					@ -47,18 +48,20 @@ public class UserRendererService(DatabaseContext db, MemberRendererService membe
 | 
				
			||||||
                ))
 | 
					                ))
 | 
				
			||||||
                : null,
 | 
					                : null,
 | 
				
			||||||
            tokenHidden ? user.ListHidden : null,
 | 
					            tokenHidden ? user.ListHidden : null,
 | 
				
			||||||
            tokenHidden ? user.LastActive : null
 | 
					            tokenHidden ? user.LastActive : null,
 | 
				
			||||||
 | 
					            tokenHidden ? user.LastSidReroll : null
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public PartialUser RenderPartialUser(User user) =>
 | 
					    public PartialUser RenderPartialUser(User user) =>
 | 
				
			||||||
        new(user.Id, user.Username, user.DisplayName, AvatarUrlFor(user), user.CustomPreferences);
 | 
					        new(user.Id, user.Sid, user.Username, user.DisplayName, AvatarUrlFor(user), user.CustomPreferences);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private string? AvatarUrlFor(User user) =>
 | 
					    private string? AvatarUrlFor(User user) =>
 | 
				
			||||||
        user.Avatar != null ? $"{config.MediaBaseUrl}/users/{user.Id}/avatars/{user.Avatar}.webp" : null;
 | 
					        user.Avatar != null ? $"{config.MediaBaseUrl}/users/{user.Id}/avatars/{user.Avatar}.webp" : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public record UserResponse(
 | 
					    public record UserResponse(
 | 
				
			||||||
        Snowflake Id,
 | 
					        Snowflake Id,
 | 
				
			||||||
 | 
					        string Sid,
 | 
				
			||||||
        string Username,
 | 
					        string Username,
 | 
				
			||||||
        string? DisplayName,
 | 
					        string? DisplayName,
 | 
				
			||||||
        string? Bio,
 | 
					        string? Bio,
 | 
				
			||||||
| 
						 | 
					@ -76,7 +79,9 @@ public class UserRendererService(DatabaseContext db, MemberRendererService membe
 | 
				
			||||||
        [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
					        [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
				
			||||||
        bool? MemberListHidden,
 | 
					        bool? MemberListHidden,
 | 
				
			||||||
        [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
					        [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
				
			||||||
        Instant? LastActive
 | 
					        Instant? LastActive,
 | 
				
			||||||
 | 
					        [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 | 
				
			||||||
 | 
					        Instant? LastSidReroll
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public record AuthenticationMethodResponse(
 | 
					    public record AuthenticationMethodResponse(
 | 
				
			||||||
| 
						 | 
					@ -92,6 +97,7 @@ public class UserRendererService(DatabaseContext db, MemberRendererService membe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public record PartialUser(
 | 
					    public record PartialUser(
 | 
				
			||||||
        Snowflake Id,
 | 
					        Snowflake Id,
 | 
				
			||||||
 | 
					        string Sid,
 | 
				
			||||||
        string Username,
 | 
					        string Username,
 | 
				
			||||||
        string? DisplayName,
 | 
					        string? DisplayName,
 | 
				
			||||||
        string? AvatarUrl,
 | 
					        string? AvatarUrl,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,8 +99,6 @@ export function ErrorBoundary() {
 | 
				
			||||||
	const error: any = useRouteError();
 | 
						const error: any = useRouteError();
 | 
				
			||||||
	const { t } = useTranslation();
 | 
						const { t } = useTranslation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	console.log(error);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const errorElem =
 | 
						const errorElem =
 | 
				
			||||||
		"code" in error && "message" in error ? (
 | 
							"code" in error && "message" in error ? (
 | 
				
			||||||
			<ApiErrorElem error={error as ApiError} />
 | 
								<ApiErrorElem error={error as ApiError} />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,8 +35,6 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
 | 
				
			||||||
		memberPage = 0;
 | 
							memberPage = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	console.log(JSON.stringify(members));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return json({ user, members, currentPage: memberPage, pageCount });
 | 
						return json({ user, members, currentPage: memberPage, pageCount });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,8 +53,6 @@ export const action = async ({ request }: ActionFunctionArgs) => {
 | 
				
			||||||
	const email = body.get("email") as string | null;
 | 
						const email = body.get("email") as string | null;
 | 
				
			||||||
	const password = body.get("password") as string | null;
 | 
						const password = body.get("password") as string | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	console.log(email, password);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	try {
 | 
						try {
 | 
				
			||||||
		const resp = await serverRequest<AuthResponse>("POST", "/auth/email/login", {
 | 
							const resp = await serverRequest<AuthResponse>("POST", "/auth/email/login", {
 | 
				
			||||||
			body: { email, password },
 | 
								body: { email, password },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										35
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					# Foxnouns.NET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rewrite of pronouns.cc's codebase in C#, using Remix for the frontend.
 | 
				
			||||||
 | 
					Still very work-in-progress, but a large portion of the backend is functional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Copyright (C) 2024  sam <u1f320>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					    it under the terms of the GNU Affero General Public License as published
 | 
				
			||||||
 | 
					    by the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					    (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					    GNU Affero General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You should have received a copy of the GNU Affero General Public License
 | 
				
			||||||
 | 
					    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Acknowledgements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Codebases I've used for inspiration/figuring things out:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [Iceshrimp.NET](https://iceshrimp.dev/iceshrimp/Iceshrimp.NET)
 | 
				
			||||||
 | 
					- [PluralKit](https://github.com/PluralKit/PluralKit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Code taken entirely or almost entirely from external sources:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- The functions in the `AddSids` migration,
 | 
				
			||||||
 | 
					  taken from [PluralKit](https://github.com/PluralKit/PluralKit/blob/32a6e97342acc3b35e6f9e7b4dd169e21d888770/PluralKit.Core/Database/Functions/functions.sql)
 | 
				
			||||||
 | 
					- `Foxnouns.Backend/Database/prune-designer-cs-files.sh`,
 | 
				
			||||||
 | 
					  taken from [Iceshrimp.NET](https://iceshrimp.dev/iceshrimp/Iceshrimp.NET/src/commit/7c93dcf79dda54fc1a4ea9772e3f80874e6bcefb/Iceshrimp.Backend/Core/Database/prune-designer-cs-files.sh)
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue