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…
Reference in a new issue