Chapters now carry many Locations (new Tags-style entity with cross-referencing) instead of a single free-text Setting field, with a Locations tab on the novel for browsing them and seeing every chapter set at each one. Also surfaces the distinct characters appearing in a chapter's beats, linked, under the beat/word count on the outline tab.
1233 lines
42 KiB
C#
1233 lines
42 KiB
C#
// <auto-generated />
|
|
using System;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
using Novelly.Api.Data;
|
|
|
|
#nullable disable
|
|
|
|
namespace Novelly.Api.Data.Migrations
|
|
{
|
|
[DbContext(typeof(NovelDbContext))]
|
|
[Migration("20260818180738_RenameSettingToLocations")]
|
|
partial class RenameSettingToLocations
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
{
|
|
#pragma warning disable 612, 618
|
|
modelBuilder.HasAnnotation("ProductVersion", "10.0.10");
|
|
|
|
modelBuilder.Entity("BeatCharacter", b =>
|
|
{
|
|
b.Property<Guid>("BeatsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("CharactersId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("BeatsId", "CharactersId");
|
|
|
|
b.HasIndex("CharactersId");
|
|
|
|
b.ToTable("BeatCharacters", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("BeatCharacterArcStage", b =>
|
|
{
|
|
b.Property<Guid>("ArcStagesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("BeatsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("ArcStagesId", "BeatsId");
|
|
|
|
b.HasIndex("BeatsId");
|
|
|
|
b.ToTable("ArcStageBeats", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("BeatTag", b =>
|
|
{
|
|
b.Property<Guid>("BeatsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("TagsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("BeatsId", "TagsId");
|
|
|
|
b.HasIndex("TagsId");
|
|
|
|
b.ToTable("BeatTags", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("ChapterLocation", b =>
|
|
{
|
|
b.Property<Guid>("ChaptersId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("LocationsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("ChaptersId", "LocationsId");
|
|
|
|
b.HasIndex("LocationsId");
|
|
|
|
b.ToTable("ChapterLocations", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("ChapterTag", b =>
|
|
{
|
|
b.Property<Guid>("ChaptersId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("TagsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("ChaptersId", "TagsId");
|
|
|
|
b.HasIndex("TagsId");
|
|
|
|
b.ToTable("ChapterTags", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("CharacterTag", b =>
|
|
{
|
|
b.Property<Guid>("CharactersId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("TagsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("CharactersId", "TagsId");
|
|
|
|
b.HasIndex("TagsId");
|
|
|
|
b.ToTable("CharacterTags", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
|
{
|
|
b.Property<int>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ClaimType")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ClaimValue")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.ToTable("AspNetUserClaims", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
|
{
|
|
b.Property<string>("LoginProvider")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ProviderKey")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ProviderDisplayName")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("LoginProvider", "ProviderKey");
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.ToTable("AspNetUserLogins", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
|
{
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("LoginProvider")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Value")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("UserId", "LoginProvider", "Name");
|
|
|
|
b.ToTable("AspNetUserTokens", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Agent.AgentConversation", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NovelId");
|
|
|
|
b.ToTable("Conversations");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Agent.AgentMessage", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Content")
|
|
.IsRequired()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("ConversationId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Role")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("Sequence")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ToolCallsJson")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("ConversationId", "Sequence")
|
|
.IsUnique();
|
|
|
|
b.ToTable("AgentMessages");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Beats.Beat", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("ChapterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("WhatHappened")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("WhatsNext")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("ChapterId", "SortOrder");
|
|
|
|
b.ToTable("Beats");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Chapters.Chapter", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Notes")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("Number")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Prose")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Summary")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("TargetWordCount")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("WordCount")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NovelId", "Number");
|
|
|
|
b.ToTable("Chapters");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.Character", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Age")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.PrimitiveCollection<string>("Aliases")
|
|
.IsRequired()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Appearance")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ArcSummary")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Backstory")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ExternalConflict")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("IdentityNote")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Importance")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("InternalConflict")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Need")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Notes")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Occupation")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Personality")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Pronouns")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("RevealedInChapterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Role")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("SameCharacterAsId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Voice")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Want")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NovelId");
|
|
|
|
b.HasIndex("RevealedInChapterId");
|
|
|
|
b.HasIndex("SameCharacterAsId");
|
|
|
|
b.ToTable("Characters");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.CharacterArcStage", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("ChapterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("CharacterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Result")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("ChapterId");
|
|
|
|
b.HasIndex("CharacterId", "SortOrder");
|
|
|
|
b.ToTable("CharacterArcStages");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.CharacterRelationship", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("CharacterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Description")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("RelatedCharacterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("RelationshipType")
|
|
.IsRequired()
|
|
.HasMaxLength(120)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("CharacterId");
|
|
|
|
b.HasIndex("RelatedCharacterId");
|
|
|
|
b.ToTable("CharacterRelationships");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Genres.Genre", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("Name")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Genres");
|
|
|
|
b.HasData(
|
|
new
|
|
{
|
|
Id = new Guid("b89aadb3-ee96-5a33-897d-94946b037f96"),
|
|
Name = "Adventure"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("1295b746-5de1-5724-aab8-186d4220c84f"),
|
|
Name = "Contemporary Fiction"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("786d6d01-be6c-5dff-ab53-17081d2979ed"),
|
|
Name = "Crime"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("800eea0a-52cb-5e03-8b6f-5e1ceaec8554"),
|
|
Name = "Dystopian"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("8dbe0291-1ab6-5045-b327-00f2025a7b0a"),
|
|
Name = "Fantasy"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("93face5a-9a61-5d63-9a8d-7fd5d49eab7d"),
|
|
Name = "Historical Fiction"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("4eba456f-b706-5f1f-bfc9-5d32cab0da62"),
|
|
Name = "Horror"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("d49c5adf-3ed9-5bc9-8652-1f7a9a098ecb"),
|
|
Name = "Literary Fiction"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("f72c6437-c8e7-519f-8d35-5aefeebbff9e"),
|
|
Name = "Magical Realism"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("1b670010-b4cc-5b22-a879-d36eb1bf3429"),
|
|
Name = "Memoir"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("03063bbf-de5d-5dd0-af06-0ee939de58bc"),
|
|
Name = "Middle Grade"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("c22ed045-52e5-54b0-8cdd-cd1d6a699c19"),
|
|
Name = "Mystery"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("abe2e8bc-a35e-5a30-a07f-7ae30a00d838"),
|
|
Name = "Non-Fiction"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("f8543db0-c519-56a0-996a-c6028176e57e"),
|
|
Name = "Poetry"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("b6251b9e-63a1-563f-94c0-834162fb580b"),
|
|
Name = "Romance"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("4f188842-488e-567a-b31d-831e0c551fa5"),
|
|
Name = "Science Fiction"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("ae67fc84-1ed9-55ae-8c9f-8a37adb52b57"),
|
|
Name = "Thriller"
|
|
},
|
|
new
|
|
{
|
|
Id = new Guid("37956a94-e9c4-5d29-abbc-f121d687f997"),
|
|
Name = "Young Adult"
|
|
});
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Imports.ImportJob", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("ChaptersCompleted")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("ChaptersTotal")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("RequestedByUserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("SourceRoot")
|
|
.IsRequired()
|
|
.HasMaxLength(1000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("StatusMessage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("SourceRoot");
|
|
|
|
b.ToTable("ImportJobs");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Locations.Location", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(120)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NovelId", "Name")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Locations");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Novels.Novel", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Author")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Genre")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Logline")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Notes")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("OwnerId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Phase")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Synopsis")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("TargetWordCount")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("OwnerId");
|
|
|
|
b.ToTable("Novels");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Questions.OpenQuestion", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("ChapterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("CharacterId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Detail")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Question")
|
|
.IsRequired()
|
|
.HasMaxLength(500)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Resolution")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("ResolvedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("ChapterId");
|
|
|
|
b.HasIndex("CharacterId");
|
|
|
|
b.HasIndex("NovelId");
|
|
|
|
b.ToTable("OpenQuestions");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Tags.Tag", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Color")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NovelId", "Name")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Tags");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Users.NovelMember", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("GrantedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("GrantedByUserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("NovelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("NovelRole")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.HasIndex("NovelId", "UserId")
|
|
.IsUnique();
|
|
|
|
b.ToTable("NovelMembers");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Users.NovellyUser", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("AccessFailedCount")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ConcurrencyStamp")
|
|
.IsConcurrencyToken()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("DisplayName")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Email")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("EmailConfirmed")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("GlobalRole")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("LockoutEnabled")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("LockoutEnd")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("NormalizedEmail")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("NormalizedUserName")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("PasswordHash")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("PhoneNumber")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("PhoneNumberConfirmed")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("SecurityStamp")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("TwoFactorEnabled")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("UserName")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("NormalizedEmail")
|
|
.HasDatabaseName("EmailIndex");
|
|
|
|
b.HasIndex("NormalizedUserName")
|
|
.IsUnique()
|
|
.HasDatabaseName("UserNameIndex");
|
|
|
|
b.ToTable("AspNetUsers", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("BeatCharacter", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Beats.Beat", null)
|
|
.WithMany()
|
|
.HasForeignKey("BeatsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Characters.Character", null)
|
|
.WithMany()
|
|
.HasForeignKey("CharactersId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("BeatCharacterArcStage", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Characters.CharacterArcStage", null)
|
|
.WithMany()
|
|
.HasForeignKey("ArcStagesId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Beats.Beat", null)
|
|
.WithMany()
|
|
.HasForeignKey("BeatsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("BeatTag", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Beats.Beat", null)
|
|
.WithMany()
|
|
.HasForeignKey("BeatsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Tags.Tag", null)
|
|
.WithMany()
|
|
.HasForeignKey("TagsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("ChapterLocation", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", null)
|
|
.WithMany()
|
|
.HasForeignKey("ChaptersId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Locations.Location", null)
|
|
.WithMany()
|
|
.HasForeignKey("LocationsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("ChapterTag", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", null)
|
|
.WithMany()
|
|
.HasForeignKey("ChaptersId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Tags.Tag", null)
|
|
.WithMany()
|
|
.HasForeignKey("TagsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("CharacterTag", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Characters.Character", null)
|
|
.WithMany()
|
|
.HasForeignKey("CharactersId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Tags.Tag", null)
|
|
.WithMany()
|
|
.HasForeignKey("TagsId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Users.NovellyUser", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Users.NovellyUser", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Users.NovellyUser", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Agent.AgentConversation", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany("Conversations")
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Novel");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Agent.AgentMessage", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Agent.AgentConversation", "Conversation")
|
|
.WithMany("Messages")
|
|
.HasForeignKey("ConversationId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Conversation");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Beats.Beat", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", "Chapter")
|
|
.WithMany("Beats")
|
|
.HasForeignKey("ChapterId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Chapter");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Chapters.Chapter", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany("Chapters")
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Novel");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.Character", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany("Characters")
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", "RevealedInChapter")
|
|
.WithMany()
|
|
.HasForeignKey("RevealedInChapterId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.HasOne("Novelly.Api.Characters.Character", "SameCharacterAs")
|
|
.WithMany("OtherIdentities")
|
|
.HasForeignKey("SameCharacterAsId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.Navigation("Novel");
|
|
|
|
b.Navigation("RevealedInChapter");
|
|
|
|
b.Navigation("SameCharacterAs");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.CharacterArcStage", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", "Chapter")
|
|
.WithMany()
|
|
.HasForeignKey("ChapterId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.HasOne("Novelly.Api.Characters.Character", "Character")
|
|
.WithMany("ArcStages")
|
|
.HasForeignKey("CharacterId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Chapter");
|
|
|
|
b.Navigation("Character");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.CharacterRelationship", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Characters.Character", "Character")
|
|
.WithMany("Relationships")
|
|
.HasForeignKey("CharacterId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Characters.Character", "RelatedCharacter")
|
|
.WithMany()
|
|
.HasForeignKey("RelatedCharacterId")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Character");
|
|
|
|
b.Navigation("RelatedCharacter");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Locations.Location", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany()
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Novel");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Novels.Novel", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Users.NovellyUser", "Owner")
|
|
.WithMany()
|
|
.HasForeignKey("OwnerId")
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
b.Navigation("Owner");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Questions.OpenQuestion", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Chapters.Chapter", "Chapter")
|
|
.WithMany()
|
|
.HasForeignKey("ChapterId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.HasOne("Novelly.Api.Characters.Character", "Character")
|
|
.WithMany()
|
|
.HasForeignKey("CharacterId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany()
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Chapter");
|
|
|
|
b.Navigation("Character");
|
|
|
|
b.Navigation("Novel");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Tags.Tag", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany("Tags")
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Novel");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Users.NovelMember", b =>
|
|
{
|
|
b.HasOne("Novelly.Api.Novels.Novel", "Novel")
|
|
.WithMany("Members")
|
|
.HasForeignKey("NovelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Novelly.Api.Users.NovellyUser", "User")
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Novel");
|
|
|
|
b.Navigation("User");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Agent.AgentConversation", b =>
|
|
{
|
|
b.Navigation("Messages");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Chapters.Chapter", b =>
|
|
{
|
|
b.Navigation("Beats");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Characters.Character", b =>
|
|
{
|
|
b.Navigation("ArcStages");
|
|
|
|
b.Navigation("OtherIdentities");
|
|
|
|
b.Navigation("Relationships");
|
|
});
|
|
|
|
modelBuilder.Entity("Novelly.Api.Novels.Novel", b =>
|
|
{
|
|
b.Navigation("Chapters");
|
|
|
|
b.Navigation("Characters");
|
|
|
|
b.Navigation("Conversations");
|
|
|
|
b.Navigation("Members");
|
|
|
|
b.Navigation("Tags");
|
|
});
|
|
#pragma warning restore 612, 618
|
|
}
|
|
}
|
|
}
|