diff --git a/RMuseum/Migrations/20231215174109_QPRelation.Designer.cs b/RMuseum/Migrations/20231215174109_QPRelation.Designer.cs
new file mode 100644
index 00000000..4b362cdd
--- /dev/null
+++ b/RMuseum/Migrations/20231215174109_QPRelation.Designer.cs
@@ -0,0 +1,5609 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using RMuseum.DbContext;
+
+#nullable disable
+
+namespace RMuseum.Migrations
+{
+ [DbContext(typeof(RMuseumDbContext))]
+ [Migration("20231215174109_QPRelation")]
+ partial class QPRelation
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens", (string)null);
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Accounting.DonationExpenditure", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Amount")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("GanjoorDonationId")
+ .HasColumnType("int");
+
+ b.Property("GanjoorExpenseId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GanjoorDonationId");
+
+ b.HasIndex("GanjoorExpenseId");
+
+ b.ToTable("DonationExpenditure");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Accounting.GanjoorDonation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Amount")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("AmountString")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DateString")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DonorLink")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DonorName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExpenditureDesc")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ImportedRecord")
+ .HasColumnType("bit");
+
+ b.Property("RecordDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Remaining")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("Unit")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorDonations");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Accounting.GanjoorExpense", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Amount")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExpenseDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Unit")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorExpenses");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Artifact.RArtifactItemRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CoverImageIndex")
+ .HasColumnType("int");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DescriptionInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FriendlyUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("LastModified")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NameInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.Property("RArtifactMasterRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RArtifactMasterRecordId", "FriendlyUrl")
+ .IsUnique()
+ .HasFilter("[FriendlyUrl] IS NOT NULL");
+
+ b.HasIndex("RArtifactMasterRecordId", "Order")
+ .IsUnique();
+
+ b.ToTable("Items");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Artifact.RArtifactMasterRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CoverImageId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CoverItemIndex")
+ .HasColumnType("int");
+
+ b.Property("DateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DescriptionInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FriendlyUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ItemCount")
+ .HasColumnType("int");
+
+ b.Property("LastModified")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NameInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CoverImageId");
+
+ b.HasIndex("FriendlyUrl")
+ .IsUnique()
+ .HasFilter("[FriendlyUrl] IS NOT NULL");
+
+ b.HasIndex("LastModified");
+
+ b.HasIndex("CoverItemIndex", "Status");
+
+ b.ToTable("Artifacts");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Artifact.RTag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("FriendlyUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("GlobalValue")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NameInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.Property("PluralName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PluralNameInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("TagType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FriendlyUrl");
+
+ b.ToTable("Tags");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Artifact.RTagValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("BookId")
+ .HasColumnType("int");
+
+ b.Property("FriendlyUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.Property("PDFBookId")
+ .HasColumnType("int");
+
+ b.Property("PDFPageId")
+ .HasColumnType("int");
+
+ b.Property("RArtifactItemRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RArtifactMasterRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RTagId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ValueInEnglish")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ValueSupplement")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BookId");
+
+ b.HasIndex("FriendlyUrl");
+
+ b.HasIndex("PDFBookId");
+
+ b.HasIndex("PDFPageId");
+
+ b.HasIndex("RArtifactItemRecordId");
+
+ b.HasIndex("RArtifactMasterRecordId");
+
+ b.HasIndex("RTagId");
+
+ b.ToTable("TagValues");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Bookmark.RUserBookmark", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Note")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RAppUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RArtifactItemRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RArtifactMasterRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RBookmarkType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RAppUserId");
+
+ b.HasIndex("RArtifactItemRecordId");
+
+ b.HasIndex("RArtifactMasterRecordId");
+
+ b.ToTable("UserBookmarks");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.ExternalFTPUpload.QueuedFTPUpload", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("DeleteFileAfterUpload")
+ .HasColumnType("bit");
+
+ b.Property("Error")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LocalFilePath")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ProcessDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Processing")
+ .HasColumnType("bit");
+
+ b.Property("QueueDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RemoteFilePath")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("QueuedFTPUploads");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.FAQ.FAQCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("CatOrder")
+ .HasColumnType("int");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Published")
+ .HasColumnType("bit");
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("FAQCategories");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.FAQ.FAQItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AnswerExcerpt")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CategoryId")
+ .HasColumnType("int");
+
+ b.Property("ContentForSearch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FullAnswer")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HashTag1")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HashTag2")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HashTag3")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HashTag4")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemOrderInCategory")
+ .HasColumnType("int");
+
+ b.Property("Pinned")
+ .HasColumnType("bit");
+
+ b.Property("PinnedItemOrder")
+ .HasColumnType("int");
+
+ b.Property("Published")
+ .HasColumnType("bit");
+
+ b.Property("Question")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.ToTable("FAQItems");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCachedRelatedPoem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("FullTitle")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FullUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("HtmlExcerpt")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PoemId")
+ .HasColumnType("int");
+
+ b.Property("PoetId")
+ .HasColumnType("int");
+
+ b.Property("PoetImageUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PoetMorePoemsLikeThisCount")
+ .HasColumnType("int");
+
+ b.Property("PoetName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RelationOrder")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FullUrl");
+
+ b.HasIndex("PoemId");
+
+ b.ToTable("GanjoorCachedRelatedPoems");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCachedRelatedSection", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("FullTitle")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FullUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HtmlExcerpt")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PoemId")
+ .HasColumnType("int");
+
+ b.Property("PoetId")
+ .HasColumnType("int");
+
+ b.Property("PoetImageUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PoetMorePoemsLikeThisCount")
+ .HasColumnType("int");
+
+ b.Property("PoetName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RelationOrder")
+ .HasColumnType("int");
+
+ b.Property("SectionIndex")
+ .HasColumnType("int");
+
+ b.Property("TargetPoemId")
+ .HasColumnType("int");
+
+ b.Property("TargetSectionIndex")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PoemId", "SectionIndex");
+
+ b.ToTable("GanjoorCachedRelatedSections");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCat", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("int");
+
+ b.Property("BookName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CatType")
+ .HasColumnType("int");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DescriptionHtml")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FullUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("MapName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("MixedModeOrder")
+ .HasColumnType("int");
+
+ b.Property("ParentId")
+ .HasColumnType("int");
+
+ b.Property("PoetId")
+ .HasColumnType("int");
+
+ b.Property("Published")
+ .HasColumnType("bit");
+
+ b.Property("RImageId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SumUpSubsGeoLocations")
+ .HasColumnType("bit");
+
+ b.Property("TableOfContentsStyle")
+ .HasColumnType("int");
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UrlSlug")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FullUrl");
+
+ b.HasIndex("PoetId");
+
+ b.HasIndex("RImageId");
+
+ b.HasIndex("ParentId", "PoetId");
+
+ SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("ParentId", "PoetId"), new[] { "Id" });
+
+ b.ToTable("GanjoorCategories");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCentury", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("EndYear")
+ .HasColumnType("int");
+
+ b.Property("HalfCenturyOrder")
+ .HasColumnType("int");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ShowInTimeLine")
+ .HasColumnType("bit");
+
+ b.Property("StartYear")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorCenturies");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCenturyPoet", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("GanjoorCenturyId")
+ .HasColumnType("int");
+
+ b.Property("PoetId")
+ .HasColumnType("int");
+
+ b.Property("PoetOrder")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GanjoorCenturyId");
+
+ b.HasIndex("PoetId");
+
+ b.ToTable("GanjoorCenturyPoet");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorComment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AuthorEmail")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AuthorIpAddress")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AuthorName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AuthorUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CommentDate")
+ .HasColumnType("datetime2");
+
+ b.Property("CoupletIndex")
+ .HasColumnType("int");
+
+ b.Property("HtmlComment")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("InReplyToId")
+ .HasColumnType("int");
+
+ b.Property("PoemId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Verse12d")
+ .HasColumnType("int");
+
+ b.Property("Verse1Id")
+ .HasColumnType("int");
+
+ b.Property("Verse2Id")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CommentDate");
+
+ b.HasIndex("InReplyToId");
+
+ b.HasIndex("PoemId");
+
+ b.HasIndex("Status");
+
+ b.HasIndex("UserId");
+
+ b.HasIndex("Verse1Id");
+
+ b.HasIndex("Verse2Id");
+
+ b.ToTable("GanjoorComments");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorCommentAbuseReport", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("GanjoorCommentId")
+ .HasColumnType("int");
+
+ b.Property("ReasonCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReasonText")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReportedById")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GanjoorCommentId");
+
+ b.HasIndex("ReportedById");
+
+ b.ToTable("GanjoorReportedComments");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorDuplicate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("DestPoemId")
+ .HasColumnType("int");
+
+ b.Property("SrcCatId")
+ .HasColumnType("int");
+
+ b.Property("SrcPoemId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("DestPoemId");
+
+ b.HasIndex("SrcPoemId");
+
+ b.ToTable("GanjoorDuplicates");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorGeoLocation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Latitude")
+ .HasColumnType("decimal(12,9)");
+
+ b.Property("Longitude")
+ .HasColumnType("decimal(12,9)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorGeoLocations");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorHealthCheckError", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("BrokenLink")
+ .HasColumnType("bit");
+
+ b.Property("MulipleTargets")
+ .HasColumnType("bit");
+
+ b.Property("ReferrerPageUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TargetUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorHealthCheckErrors");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorLanguage", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Code")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("NativeName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RightToLeft")
+ .HasColumnType("bit");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasFilter("[Name] IS NOT NULL");
+
+ b.ToTable("GanjoorLanguages");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorMetre", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Rhythm")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UrlSlug")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("VerseCount")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("GanjoorMetres");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorNumbering", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("EndCatId")
+ .HasColumnType("int");
+
+ b.Property("LastCountingDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("StartCatId")
+ .HasColumnType("int");
+
+ b.Property("TotalCouplets")
+ .HasColumnType("int");
+
+ b.Property("TotalLines")
+ .HasColumnType("int");
+
+ b.Property("TotalParagraphs")
+ .HasColumnType("int");
+
+ b.Property("TotalVerses")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EndCatId");
+
+ b.HasIndex("StartCatId");
+
+ b.ToTable("GanjoorNumberings");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPage", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("int");
+
+ b.Property("CatId")
+ .HasColumnType("int");
+
+ b.Property("FullTitle")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FullUrl")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("GanjoorPageType")
+ .HasColumnType("int");
+
+ b.Property("HtmlText")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NoIndex")
+ .HasColumnType("bit");
+
+ b.Property("PageOrder")
+ .HasColumnType("int");
+
+ b.Property("ParentId")
+ .HasColumnType("int");
+
+ b.Property