diff --git a/RMuseum/Controllers/AppUserController.cs b/RMuseum/Controllers/AppUserController.cs
index e79cf9de..c35efbdd 100644
--- a/RMuseum/Controllers/AppUserController.cs
+++ b/RMuseum/Controllers/AppUserController.cs
@@ -50,7 +50,7 @@ namespace RMuseum.Controllers
var l = res.Result;
bool keepHistory = false;
- var kRes = await _optionsService.GetValueAsync("KeepHistory", l.User.Id);
+ var kRes = await _optionsService.GetValueAsync("KeepHistory", l.User.Id, null);
if (!string.IsNullOrEmpty(kRes.Result))
bool.TryParse(kRes.Result, out keepHistory);
@@ -92,7 +92,7 @@ namespace RMuseum.Controllers
var l = res.Result;
bool keepHistory = false;
- var kRes = await _optionsService.GetValueAsync("KeepHistory", l.User.Id);
+ var kRes = await _optionsService.GetValueAsync("KeepHistory", l.User.Id, null);
if (!string.IsNullOrEmpty(kRes.Result))
bool.TryParse(kRes.Result, out keepHistory);
diff --git a/RMuseum/Controllers/RGenericOptionsController.cs b/RMuseum/Controllers/RGenericOptionsController.cs
index e3568d69..56f56728 100644
--- a/RMuseum/Controllers/RGenericOptionsController.cs
+++ b/RMuseum/Controllers/RGenericOptionsController.cs
@@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Caching.Memory;
using RSecurityBackend.Controllers;
using RSecurityBackend.Services;
diff --git a/RMuseum/Migrations/20250125132904_WorkspaceGenericOptions.Designer.cs b/RMuseum/Migrations/20250125132904_WorkspaceGenericOptions.Designer.cs
new file mode 100644
index 00000000..f609dd7f
--- /dev/null
+++ b/RMuseum/Migrations/20250125132904_WorkspaceGenericOptions.Designer.cs
@@ -0,0 +1,5974 @@
+//
+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("20250125132904_WorkspaceGenericOptions")]
+ partial class WorkspaceGenericOptions
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.1")
+ .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")
+ .HasMaxLength(16)
+ .HasColumnType("nvarchar(16)");
+
+ b.Property("LastModified")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasMaxLength(1200)
+ .HasColumnType("nvarchar(1200)");
+
+ b.Property("NameInEnglish")
+ .HasMaxLength(1200)
+ .HasColumnType("nvarchar(1200)");
+
+ 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")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ItemCount")
+ .HasColumnType("int");
+
+ b.Property("LastModified")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasMaxLength(1200)
+ .HasColumnType("nvarchar(1200)");
+
+ b.Property("NameInEnglish")
+ .HasMaxLength(1200)
+ .HasColumnType("nvarchar(1200)");
+
+ 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")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("NameInEnglish")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.Property("PluralName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("PluralNameInEnglish")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ 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.CategoryWordCount", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CatId")
+ .HasColumnType("int");
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("RowNmbrInCat")
+ .HasColumnType("int");
+
+ b.Property("Word")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatId", "Word")
+ .IsUnique()
+ .HasFilter("[Word] IS NOT NULL");
+
+ b.ToTable("CategoryWordCounts");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.CategoryWordCountSummary", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CatId")
+ .HasColumnType("int");
+
+ b.Property("TotalWordCount")
+ .HasColumnType("int");
+
+ b.Property("UniqueWordCount")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatId")
+ .IsUnique();
+
+ b.ToTable("CategoryWordCountSummaries");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.DigitalSource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("CoupletsCount")
+ .HasColumnType("int");
+
+ b.Property("FullName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ShortName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UrlSlug")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("DigitalSources");
+ });
+
+ modelBuilder.Entity("RMuseum.Models.Ganjoor.DiscoverQuotedQueueItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PoemId")
+ .HasColumnType("int");
+
+ b.Property("PoetId")
+ .HasColumnType("int");
+
+ b.Property("RelatedPoemId")
+ .HasColumnType("int");
+
+ b.Property("RelatedPoetId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("DiscoverQuotedQueueItems");
+ });
+
+ 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("MachineGenerated")
+ .HasColumnType("bit");
+
+ 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