This commit is contained in:
Vivian Lim 2023-06-03 02:52:25 -07:00
parent 6955b676c0
commit 2056304435
35 changed files with 7097 additions and 97 deletions

View File

@ -1,7 +1,8 @@
@page
@using Microsoft.AspNetCore.Identity
@using PostLab.Data.Model.Framework;
@attribute [IgnoreAntiforgeryToken]
@inject SignInManager<IdentityUser> SignInManager
@inject SignInManager<LoginUser> SignInManager
@functions {
public async Task<IActionResult> OnPost()
{

View File

@ -1,6 +1,7 @@
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@using PostLab.Data.Model.Framework;
@inject SignInManager<LoginUser> SignInManager
@inject UserManager<LoginUser> UserManager
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<ul class="navbar-nav">

View File

@ -0,0 +1,17 @@
using PostLab.Data.Model.Abstract;
namespace PostLab.Data
{
public static class ConstructionUtil
{
public static Guid NewId()
{
return Guid.NewGuid();
}
public static DateTime GetDateTimeUtc()
{
return DateTime.UtcNow;
}
}
}

View File

@ -611,7 +611,7 @@ namespace PostLab.Data.Migrations
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("Owners")
.WithMany("LoginUsers")
.HasForeignKey("ProfileId");
});
@ -641,7 +641,7 @@ namespace PostLab.Data.Migrations
{
b.Navigation("CustomFields");
b.Navigation("Owners");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>

View File

@ -0,0 +1,713 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603014406_PostLabModel-avatar")]
partial class PostLabModelavatar
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasColumnType("nvarchar(max)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedUserName")
.HasColumnType("nvarchar(max)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("LoginUser");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("LoginUsers")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,51 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class PostLabModelavatar : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "FileAttachment",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
FileName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ContentType = table.Column<string>(type: "nvarchar(max)", nullable: false),
Data = table.Column<byte[]>(type: "varbinary(max)", nullable: false),
ExpirationUtc = table.Column<DateTime>(type: "datetime2", nullable: true),
CreatedUtc = table.Column<DateTime>(type: "datetime2", nullable: false),
OwnerId = table.Column<Guid>(type: "uniqueidentifier", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_FileAttachment", x => x.Id);
table.ForeignKey(
name: "FK_FileAttachment_Profiles_OwnerId",
column: x => x.OwnerId,
principalTable: "Profiles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_FileAttachment_OwnerId",
table: "FileAttachment",
column: "OwnerId",
unique: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "FileAttachment");
}
}
}

View File

@ -0,0 +1,675 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603054336_changeusertype")]
partial class changeusertype
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.HasIndex("ProfileId");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("LoginUsers")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,99 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class changeusertype : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "LoginUser");
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<Guid>(
name: "ProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers",
column: "ProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers",
column: "ProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "Discriminator",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "ProfileId",
table: "AspNetUsers");
migrationBuilder.CreateTable(
name: "LoginUser",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
AccessFailedCount = table.Column<int>(type: "int", nullable: false),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
Email = table.Column<string>(type: "nvarchar(max)", nullable: true),
EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),
LockoutEnabled = table.Column<bool>(type: "bit", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
NormalizedEmail = table.Column<string>(type: "nvarchar(max)", nullable: true),
NormalizedUserName = table.Column<string>(type: "nvarchar(max)", nullable: true),
PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false),
ProfileId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
SecurityStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false),
UserName = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_LoginUser", x => x.Id);
table.ForeignKey(
name: "FK_LoginUser_Profiles_ProfileId",
column: x => x.ProfileId,
principalTable: "Profiles",
principalColumn: "Id");
});
migrationBuilder.CreateIndex(
name: "IX_LoginUser_ProfileId",
table: "LoginUser",
column: "ProfileId");
}
}
}

View File

@ -0,0 +1,677 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603062002_profilepicker")]
partial class profilepicker
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("LastSelectedProfileId")
.HasColumnType("uniqueidentifier");
b.HasIndex("LastSelectedProfileId");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "LastSelectedProfile")
.WithMany("LoginUsers")
.HasForeignKey("LastSelectedProfileId");
b.Navigation("LastSelectedProfile");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,60 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class profilepicker : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "ProfileId",
table: "AspNetUsers",
newName: "LastSelectedProfileId");
migrationBuilder.RenameIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers",
newName: "IX_AspNetUsers_LastSelectedProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "LastSelectedProfileId",
table: "AspNetUsers",
newName: "ProfileId");
migrationBuilder.RenameIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers",
newName: "IX_AspNetUsers_ProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers",
column: "ProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
}
}

View File

@ -0,0 +1,646 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603072359_fixownerids")]
partial class fixownerids
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,60 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class fixownerids : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "Discriminator",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "LastSelectedProfileId",
table: "AspNetUsers");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<Guid>(
name: "LastSelectedProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
}
}

View File

@ -0,0 +1,677 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603082145_churn")]
partial class churn
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("LastSelectedProfileId")
.HasColumnType("uniqueidentifier");
b.HasIndex("LastSelectedProfileId");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "LastSelectedProfile")
.WithMany("LoginUsers")
.HasForeignKey("LastSelectedProfileId");
b.Navigation("LastSelectedProfile");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,60 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class churn : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<Guid>(
name: "LastSelectedProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "Discriminator",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "LastSelectedProfileId",
table: "AspNetUsers");
}
}
}

View File

@ -0,0 +1,678 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603093348_profilerelationship")]
partial class profilerelationship
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("LastSelectedProfileId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.HasIndex("ProfileId");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("LoginUsers")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,69 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class profilerelationship : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers");
migrationBuilder.AddColumn<Guid>(
name: "ProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers",
column: "ProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers",
column: "ProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "ProfileId",
table: "AspNetUsers");
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_LastSelectedProfileId",
table: "AspNetUsers",
column: "LastSelectedProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
}
}

View File

@ -0,0 +1,675 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603094020_removelastselectedid")]
partial class removelastselectedid
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.HasIndex("ProfileId");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("LoginUsers")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
b.Navigation("LoginUsers");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,29 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class removelastselectedid : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "LastSelectedProfileId",
table: "AspNetUsers");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "LastSelectedProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
}
}
}

View File

@ -0,0 +1,691 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603094528_manytomanyprofiles")]
partial class manytomanyprofiles
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("LoginUserProfile", b =>
{
b.Property<string>("LoginUsersId")
.HasColumnType("nvarchar(450)");
b.Property<Guid>("ProfilesId")
.HasColumnType("uniqueidentifier");
b.HasKey("LoginUsersId", "ProfilesId");
b.HasIndex("ProfilesId");
b.ToTable("LoginUserProfile");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("LoginUserProfile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.LoginUser", null)
.WithMany()
.HasForeignKey("LoginUsersId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany()
.HasForeignKey("ProfilesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,81 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class manytomanyprofiles : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "ProfileId",
table: "AspNetUsers");
migrationBuilder.CreateTable(
name: "LoginUserProfile",
columns: table => new
{
LoginUsersId = table.Column<string>(type: "nvarchar(450)", nullable: false),
ProfilesId = table.Column<Guid>(type: "uniqueidentifier", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_LoginUserProfile", x => new { x.LoginUsersId, x.ProfilesId });
table.ForeignKey(
name: "FK_LoginUserProfile_AspNetUsers_LoginUsersId",
column: x => x.LoginUsersId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_LoginUserProfile_Profiles_ProfilesId",
column: x => x.ProfilesId,
principalTable: "Profiles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_LoginUserProfile_ProfilesId",
table: "LoginUserProfile",
column: "ProfilesId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "LoginUserProfile");
migrationBuilder.AddColumn<Guid>(
name: "ProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_ProfileId",
table: "AspNetUsers",
column: "ProfileId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_Profiles_ProfileId",
table: "AspNetUsers",
column: "ProfileId",
principalTable: "Profiles",
principalColumn: "Id");
}
}
}

View File

@ -0,0 +1,694 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PostLab.Data;
#nullable disable
namespace PostLab.Data.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230603094707_add-back-last-profileid")]
partial class addbacklastprofileid
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("LoginUserProfile", b =>
{
b.Property<string>("LoginUsersId")
.HasColumnType("nvarchar(450)");
b.Property<Guid>("ProfilesId")
.HasColumnType("uniqueidentifier");
b.HasKey("LoginUsersId", "ProfilesId");
b.HasIndex("ProfilesId");
b.ToTable("LoginUserProfile");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ContentId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumPostId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ContentId");
b.HasIndex("ForumPostId");
b.ToTable("ForumPostVersions");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Bio")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Profiles");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Order")
.HasColumnType("int");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("ProfileCustomField");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("RealmId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("ForumBoards");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid?>("ForumThreadId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ReplyToId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("ForumThreadId");
b.HasIndex("OwnerId");
b.HasIndex("ReplyToId");
b.ToTable("ForumPosts");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("BoardId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("BoardId");
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Realm");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ContentType")
.HasColumnType("int");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("LastSelectedProfileId")
.HasColumnType("uniqueidentifier");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("LoginUserProfile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.LoginUser", null)
.WithMany()
.HasForeignKey("LoginUsersId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany()
.HasForeignKey("ProfilesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
.WithMany()
.HasForeignKey("ContentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", null)
.WithMany("History")
.HasForeignKey("ForumPostId");
b.Navigation("Content");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Members")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.ProfileCustomField", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("CustomFields")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumBoard", b =>
{
b.HasOne("PostLab.Data.Model.Framework.Realm", null)
.WithMany("Boards")
.HasForeignKey("RealmId");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumThread", null)
.WithMany("Posts")
.HasForeignKey("ForumThreadId");
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Forum.ForumPost", "ReplyTo")
.WithMany()
.HasForeignKey("ReplyToId");
b.Navigation("Owner");
b.Navigation("ReplyTo");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.HasOne("PostLab.Data.Model.Forum.ForumBoard", "Board")
.WithMany()
.HasForeignKey("BoardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.RichContent", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithMany()
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("Avatar");
b.Navigation("CustomFields");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumThread", b =>
{
b.Navigation("Posts");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Navigation("Boards");
b.Navigation("Members");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,29 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PostLab.Data.Migrations
{
/// <inheritdoc />
public partial class addbacklastprofileid : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "LastSelectedProfileId",
table: "AspNetUsers",
type: "uniqueidentifier",
nullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "LastSelectedProfileId",
table: "AspNetUsers");
}
}
}

View File

@ -22,6 +22,21 @@ namespace PostLab.Data.Migrations
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("LoginUserProfile", b =>
{
b.Property<string>("LoginUsersId")
.HasColumnType("nvarchar(450)");
b.Property<Guid>("ProfilesId")
.HasColumnType("uniqueidentifier");
b.HasKey("LoginUsersId", "ProfilesId");
b.HasIndex("ProfilesId");
b.ToTable("LoginUserProfile");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
@ -86,6 +101,10 @@ namespace PostLab.Data.Migrations
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Discriminator")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
@ -137,6 +156,10 @@ namespace PostLab.Data.Migrations
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
@ -224,6 +247,40 @@ namespace PostLab.Data.Migrations
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ContentType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreatedUtc")
.HasColumnType("datetime2");
b.Property<byte[]>("Data")
.IsRequired()
.HasColumnType("varbinary(max)");
b.Property<DateTime?>("ExpirationUtc")
.HasColumnType("datetime2");
b.Property<string>("FileName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("OwnerId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("OwnerId")
.IsUnique();
b.ToTable("FileAttachment");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.Property<Guid>("Id")
@ -379,64 +436,6 @@ namespace PostLab.Data.Migrations
b.ToTable("ForumThreads");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasColumnType("nvarchar(max)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedUserName")
.HasColumnType("nvarchar(max)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<Guid?>("ProfileId")
.HasColumnType("uniqueidentifier");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("ProfileId");
b.ToTable("LoginUser");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.Property<Guid>("Id")
@ -486,6 +485,31 @@ namespace PostLab.Data.Migrations
b.ToTable("RichContent");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<Guid?>("LastSelectedProfileId")
.HasColumnType("uniqueidentifier");
b.HasDiscriminator().HasValue("LoginUser");
});
modelBuilder.Entity("LoginUserProfile", b =>
{
b.HasOne("PostLab.Data.Model.Framework.LoginUser", null)
.WithMany()
.HasForeignKey("LoginUsersId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany()
.HasForeignKey("ProfilesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
@ -537,6 +561,17 @@ namespace PostLab.Data.Migrations
.IsRequired();
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.FileAttachment", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
.WithOne("Avatar")
.HasForeignKey("PostLab.Data.Model.Abstract.FileAttachment", "OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("PostLab.Data.Model.Abstract.Versioned<PostLab.Data.Model.Framework.RichContent>+TrackedVersion", b =>
{
b.HasOne("PostLab.Data.Model.Framework.RichContent", "Content")
@ -605,13 +640,6 @@ namespace PostLab.Data.Migrations
b.Navigation("Board");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.LoginUser", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", null)
.WithMany("Owners")
.HasForeignKey("ProfileId");
});
modelBuilder.Entity("PostLab.Data.Model.Framework.Realm", b =>
{
b.HasOne("PostLab.Data.Model.Actors.Profile", "Owner")
@ -636,9 +664,9 @@ namespace PostLab.Data.Migrations
modelBuilder.Entity("PostLab.Data.Model.Actors.Profile", b =>
{
b.Navigation("CustomFields");
b.Navigation("Avatar");
b.Navigation("Owners");
b.Navigation("CustomFields");
});
modelBuilder.Entity("PostLab.Data.Model.Forum.ForumPost", b =>

View File

@ -9,7 +9,5 @@
public required byte[] Data { get; set; }
public DateTime? ExpirationUtc { get; set; }
public required ICollection<Guid> ReferencedByIds { get; set; }
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -9,6 +10,8 @@ namespace PostLab.Data.Model.Abstract
{
public class OwnedTimestampedUnique : TimestampedUnique
{
[ForeignKey("Owner")]
public required Guid OwnerId { get; init; }
public required Profile Owner { get; init; }
}
}

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Identity;
using PostLab.Data.Model.Framework;
using PostLab.Data.Model.Abstract;
using System.ComponentModel.DataAnnotations.Schema;
namespace PostLab.Data.Model.Actors
{
@ -12,7 +13,9 @@ namespace PostLab.Data.Model.Actors
public required ICollection<ProfileCustomField> CustomFields { get; set; }
public required ICollection<LoginUser> Owners { get; set; }
public List<LoginUser> LoginUsers { get; set; } = new();
public FileAttachment? Avatar { get; set; }
}
public class ProfileCustomField

View File

@ -1,8 +1,12 @@
using Microsoft.AspNetCore.Identity;
using PostLab.Data.Model.Actors;
using System.ComponentModel.DataAnnotations.Schema;
namespace PostLab.Data.Model.Framework
{
public class LoginUser : IdentityUser<Guid>
public class LoginUser : IdentityUser
{
public Guid? LastSelectedProfileId { get; set; }
public List<Profile> Profiles { get; set; } = new();
}
}

View File

@ -0,0 +1,39 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using PostLab.Data.Model.Framework;
namespace PostLab.Data.Model
{
public class UserManagerFactory
{
public UserManagerFactory(IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<LoginUser> passwordHasher, IEnumerable<IUserValidator<LoginUser>> userValidators, IEnumerable<IPasswordValidator<LoginUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<LoginUser>> logger)
{
OptionsAccessor = optionsAccessor;
PasswordHasher = passwordHasher;
UserValidators = userValidators;
PasswordValidators = passwordValidators;
KeyNormalizer = keyNormalizer;
Errors = errors;
Services = services;
Logger = logger;
}
private IOptions<IdentityOptions> OptionsAccessor { get; set; }
private IPasswordHasher<LoginUser> PasswordHasher { get; set; }
private IEnumerable<IUserValidator<LoginUser>> UserValidators { get; set; }
private IEnumerable<IPasswordValidator<LoginUser>> PasswordValidators { get; set; }
private ILookupNormalizer KeyNormalizer { get; set; }
private IdentityErrorDescriber Errors { get; set; }
private IServiceProvider Services { get; set; }
private ILogger<UserManager<LoginUser>> Logger { get; set; }
public UserManager<LoginUser> Build(IdentityDbContext context)
{
var store = new UserStore<LoginUser>(context);
return new UserManager<LoginUser>(store, OptionsAccessor, PasswordHasher, UserValidators, PasswordValidators, KeyNormalizer, Errors, Services, Logger);
}
}
}

View File

@ -3,39 +3,122 @@ using PostLab.Data.Model.Framework;
using PostLab.Data.Model.Actors;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
using PostLab.Data.Model;
namespace PostLab.Data.Services
{
public class UserProfileService
{
private readonly ApplicationDbContext _dbContext;
private readonly IDbContextFactory<ApplicationDbContext> _dbContext;
private readonly AuthenticationStateProvider _authenticationStateProvider;
private readonly UserManagerFactory _userManager;
public UserProfileService(ApplicationDbContext dbContext, AuthenticationStateProvider authenticationStateProvider)
public Profile? ActiveProfile { get; private set; }
public event EventHandler<Profile> ProfileChanged;
public UserProfileService(IDbContextFactory<ApplicationDbContext> dbContextFactory, AuthenticationStateProvider authenticationStateProvider, UserManagerFactory userManager)
{
this._dbContext = dbContext;
this._dbContext = dbContextFactory;
this._authenticationStateProvider = authenticationStateProvider;
this._userManager = userManager;
}
public async Task<ICollection<Profile>> GetProfilesAsync()
{
using var context = await _dbContext.CreateDbContextAsync();
var authState = await this._authenticationStateProvider.GetAuthenticationStateAsync();
var identity = authState.User.Identity;
var user = authState.User;
if (identity == null || !identity.IsAuthenticated)
if (user == null || user.Identity?.IsAuthenticated != true)
{
throw new Exception("Unauthenticated user cannot have profiles");
return new List<Profile>();
}
var profiles = await this._dbContext.Profiles
.Where(profile => profile.Owners.Any(owner => owner.UserName == identity.Name))
.ToListAsync();
var userManager = _userManager.Build(context);
var loginUser = await userManager.GetUserAsync(user);
if (loginUser == null)
{
throw new Exception("User not found.");
}
var profiles = await GetUserProfiles(context, loginUser).ToListAsync();
return profiles;
}
public async Task CreateProfileAsync(Profile profile)
public async Task SetActiveProfileAsync(Guid? profileId)
{
using var context = await _dbContext.CreateDbContextAsync();
var authState = await this._authenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
if (user == null || user.Identity?.IsAuthenticated != true)
{
if (profileId != null)
{
throw new Exception("Unauthenticated user cannot set a specific active profile");
}
this.ActiveProfile = null;
return;
}
var userManager = _userManager.Build(context);
var loginUser = await userManager.GetUserAsync(user);
if (loginUser == null)
{
throw new Exception("User not found.");
}
Profile? profile;
// If a profile wasn't specified, use the last selected profile if there is one.
if (profileId == null && loginUser.LastSelectedProfileId != null)
{
profileId = loginUser.LastSelectedProfileId;
}
// If no profile still was specified, try to use the first profile.
if (profileId == null)
{
profile = await GetUserProfiles(context, loginUser).FirstOrDefaultAsync();
}
else
{
profile = await GetUserProfiles(context, loginUser).SingleAsync(profile => profile.Id == profileId);
}
if (profile == null)
{
//throw new Exception("Profile not found.");
// todo think about how to handle this case ... need some flow that requires setting up the first profile
return;
}
loginUser.LastSelectedProfileId = profile.Id;
await userManager.UpdateAsync(loginUser);
this.ActiveProfile = profile;
this.ProfileChanged?.Invoke(this, profile);
}
private IQueryable<Profile> GetUserProfiles(ApplicationDbContext context, LoginUser loginUser)
{
return context.Profiles
.Where(profile => profile.LoginUsers.Contains(loginUser));
}
public async Task CreateProfileAsync(CreateNewProfileModel createProfile)
{
using var context = await _dbContext.CreateDbContextAsync();
var authState = await this._authenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
@ -44,16 +127,37 @@ namespace PostLab.Data.Services
throw new Exception("Unauthenticated user cannot create profile");
}
if (user.Identity is LoginUser loginUser)
// Validate the form input
if (createProfile.Name.Length == 0)
{
profile.Owners.Add(loginUser);
await this._dbContext.Profiles.AddAsync(profile);
await this._dbContext.SaveChangesAsync();
throw new Exception("Requested profile name is empty.");
}
else
var userManager = _userManager.Build(context);
var loginUser = await userManager.GetUserAsync(user);
if (loginUser == null)
{
throw new Exception("user identity isn't a LoginUser somehow");
throw new Exception("User not found.");
}
var profile = new Profile
{
Id = ConstructionUtil.NewId(),
CreatedUtc = ConstructionUtil.GetDateTimeUtc(),
Name = createProfile.Name,
LoginUsers = new List<LoginUser>() { loginUser },
CustomFields = new List<ProfileCustomField>()
};
context.Profiles.Add(profile);
context.SaveChanges();
}
public class CreateNewProfileModel
{
public string Name { get; set; } = "";
}
}
}

View File

@ -0,0 +1,74 @@
@page "/my/profiles"
@using PostLab.Data
@using PostLab.Data.Model.Actors;
@using PostLab.Data.Services;
@inject UserProfileService UserProfileService
<PageTitle>Profiles</PageTitle>
<h1>Profiles</h1>
<p>Manage your profiles</p>
@if (profiles == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Avatar</th>
</tr>
</thead>
<tbody>
@foreach (var profile in profiles)
{
<tr>
<td>@profile.Name</td>
<td>
@if (profile.Avatar != null)
{
//<img src="@profile.Avatar" alt="Profile avatar" />
<p>(would put an avatar here)</p>
}
else
{
<img src="images/avatars/default.png" alt="Default avatar" />
}
</td>
</tr>
}
</tbody>
</table>
<h2>Create a profile</h2>
<EditForm Model="@newProfileModel" OnSubmit="@HandleCreateClickedAsync">
<InputText id="name" @bind-Value="newProfileModel.Name" />
<button type="submit">Create</button>
</EditForm>
}
@code {
private ICollection<Profile>? profiles;
private UserProfileService.CreateNewProfileModel newProfileModel = new();
protected override async Task OnInitializedAsync()
{
await UpdateProfileListAsync();
}
private async Task UpdateProfileListAsync()
{
profiles = await UserProfileService.GetProfilesAsync();
}
private async Task HandleCreateClickedAsync()
{
await UserProfileService.CreateProfileAsync(newProfileModel);
await UpdateProfileListAsync();
}
}

View File

@ -2,10 +2,14 @@ using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using PostLab.Areas.Identity;
using PostLab.Data;
using PostLab.Data.Model;
using PostLab.Data.Model.Framework;
using PostLab.Data.Services;
namespace PostLab
{
@ -17,16 +21,24 @@ namespace PostLab
// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDbContextFactory<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddScoped<ApplicationDbContext>(p => p.GetRequiredService<IDbContextFactory<ApplicationDbContext>>().CreateDbContext());
builder.Services.AddScoped<UserManagerFactory>();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
builder.Services.AddDefaultIdentity<LoginUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
builder.Services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<LoginUser>>();
builder.Services.AddSingleton<WeatherForecastService>();
// application-specific services
builder.Services.AddScoped<UserProfileService>();
builder.Services.Configure<IdentityOptions>(options =>
{
// extremely lax requirements during development

View File

@ -11,6 +11,7 @@
<main>
<div class="top-row px-4 auth">
<LoginDisplay />
<PostLab.Shared.ProfileSwitcher></PostLab.Shared.ProfileSwitcher>
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
</div>

View File

@ -25,6 +25,11 @@
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="my/profiles">
<span class="oi oi-list-rich" aria-hidden="true"></span> Profiles
</NavLink>
</div>
</nav>
</div>

View File

@ -0,0 +1,46 @@
@using PostLab.Data.Model.Actors;
@using PostLab.Data.Services;
@inject UserProfileService UserProfileService
@if (profiles == null)
{
}
else
{
<label>profile</label>
<select id="profile_picker" @bind=@selectedProfileId @onchange=@SelectedProfileChanged>
@foreach (var profile in profiles)
{
<option value=@profile.Id.ToString()>@profile.Name</option>
}
</select>
}
@code {
private Guid? selectedProfileId;
private ICollection<Profile>? profiles;
protected override async Task OnInitializedAsync()
{
UserProfileService.ProfileChanged += (s, e) =>
{
selectedProfileId = e?.Id;
};
await UpdateProfileListAsync();
await UserProfileService.SetActiveProfileAsync(null);
}
Task SelectedProfileChanged(ChangeEventArgs e)
{
}
private async Task UpdateProfileListAsync()
{
profiles = await UserProfileService.GetProfilesAsync();
}
}

View File

@ -11,7 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PostLabBlazor.Shared", "Pos
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PostLabServer", "PostLabServer\PostLabServer.csproj", "{750F8070-2C2C-4691-A97A-97A06F9746AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostLab", "PostLab\PostLab.csproj", "{4E4F31D5-BB54-4D78-85A0-831B9035D536}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PostLab", "PostLab\PostLab.csproj", "{4E4F31D5-BB54-4D78-85A0-831B9035D536}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostLab.Model", "PostLab.Model\PostLab.Model.csproj", "{4A1A2F02-B3C2-4070-8CB2-1B94DAD203DE}"
EndProject