using Microsoft.EntityFrameworkCore; using RMuseum.Models.Artifact; using RMuseum.Models.Bookmark; using RMuseum.Models.GanjoorAudio; using RMuseum.Models.UploadSession; using RMuseum.Models.GanjoorIntegration; using RMuseum.Models.ImportJob; using RMuseum.Models.Note; using RSecurityBackend.DbContext; using RSecurityBackend.Models.Auth.Db; using System; using RMuseum.Models.Ganjoor; using RMuseum.Models.Ganjoor.SemanticSearch; using RMuseum.Models.MusicCatalogue; using RMuseum.Models.Accounting; using Microsoft.Extensions.Configuration; using System.IO; using RMuseum.Models.FAQ; using RMuseum.Models.PDFLibrary; using RMuseum.Models.ExternalFTPUpload; namespace RMuseum.DbContext { /// /// Museum Database Context /// public class RMuseumDbContext : RSecurityDbContext { public RMuseumDbContext(DbContextOptions options) : base(options) { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json") .Build(); if (bool.Parse(configuration["DatabaseMigrate"])) { Database.SetCommandTimeout(18000);//set time out for migration to 5 hours Database.Migrate(); } } /// /// /// /// protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity() .HasIndex(m => m.FriendlyUrl) .IsUnique(); builder.Entity() .HasIndex(i => new { i.RArtifactMasterRecordId, i.FriendlyUrl }) .IsUnique(); builder.Entity() .HasIndex(i => new { i.RArtifactMasterRecordId, i.Order }) .IsUnique(); builder.Entity() .HasIndex(t => t.FriendlyUrl); builder.Entity() .HasIndex(t => t.FriendlyUrl); builder.Entity() .HasIndex(p => p.GanjoorPostId); builder.Entity() .HasIndex(c => c.FullUrl); builder.Entity() .HasIndex(c => c.FullUrl); builder.Entity() .HasIndex(c => c.FullUrl); builder.Entity() .HasIndex(c => c.Name); builder.Entity() .HasIndex(c => c.Name); builder.Entity() .HasIndex(c => c.CommentDate); builder.Entity() .Property(c => c.ProgressPercent) .HasColumnType("decimal(18,2)"); builder.Entity() .HasIndex(c => c.Status); builder.Entity() .HasIndex(c => c.Id); builder.Entity() .HasIndex(c => c.GanjoorAudioId); builder.Entity() .HasIndex(c => new { c.ReviewStatus, c.GanjoorPostId }); builder.Entity() .HasIndex(c => c.LastModified); builder.Entity() .HasIndex(c => new { c.Published, c.Id }) .IncludeProperties(c => new { c.Name, c.Nickname, c.RImageId }); builder.Entity() .HasIndex(c => new { c.ParentId, c.PoetId }) .IncludeProperties(c => c.Id); builder.Entity() .HasIndex(c => new { c.Approved, c.Rejected }); builder.Entity() .HasIndex(c => new { c.CoverItemIndex, c.Status }); builder.Entity() .HasIndex(m => m.Name) .IsUnique(); builder.Entity() .HasIndex(b => new { b.UserId, b.PoemId, b.CoupletIndex }); builder.Entity() .HasIndex(n => new { n.NumberingId, n.PoemId, n.CoupletIndex }) .IsUnique(); builder.Entity() .HasIndex(n => new { n.PoemId, n.CoupletIndex }); builder.Entity() .HasIndex(v => v.PoemId);//the next statement causes a drop index in the migration which this line prevents it builder.Entity() .HasIndex(v => new { v.PoemId, v.CoupletIndex }); builder.Entity() .HasIndex(c => new { c.PoemId }); builder.Entity() .HasIndex(c => new { c.FullUrl }); builder.Entity() .Property(c => c.Amount) .HasColumnType("decimal(18,2)"); builder.Entity() .Property(c => c.Remaining) .HasColumnType("decimal(18,2)"); builder.Entity() .Property(c => c.Amount) .HasColumnType("decimal(18,2)"); builder.Entity() .Property(c => c.Amount) .HasColumnType("decimal(18,2)"); builder.Entity() .Property(c => c.Latitude) .HasColumnType("decimal(12,9)"); builder.Entity() .Property(c => c.Longitude) .HasColumnType("decimal(12,9)"); builder.Entity() .HasIndex(v => new { v.RecitationId, v.UserId }) .IsUnique(); builder.Entity() .HasIndex(v => v.UserId); builder.Entity() .HasIndex(v => new { v.UserId, v.PoemId }); builder.Entity() .HasIndex(v => new { v.PoemId, v.Index }); builder.Entity() .HasIndex(v => new { v.RhymeLetters }); builder.Entity() .HasIndex(v => new { v.GanjoorMetreId, v.RhymeLetters }); builder.Entity() .HasIndex(v => new { v.GanjoorMetreId, v.RhymeLetters, v.Id}); builder.Entity() .HasIndex(v => new { v.GanjoorMetreId, v.RhymeLetters, v.SectionType }); builder.Entity() .HasIndex(v => new { v.PoemId, v.SectionIndex }); builder.Entity() .HasIndex(v => new { v.CatId, v.Word }) .IsUnique(); builder.Entity() .HasIndex(v => new { v.CatId }) .IsUnique(); builder.Entity() .Property(e => e.CoupletSummary) .HasMaxLength(4000); builder.Entity() .Property(e => e.Title) .HasMaxLength(1500); builder.Entity() .Property(e => e.FullTitle) .HasMaxLength(1500); builder.Entity() .Property(e => e.UrlSlug) .HasMaxLength(32); builder.Entity() .Property(e => e.RhymeLetters) .HasMaxLength(64); builder.Entity() .Property(e => e.SourceName) .HasMaxLength(64); builder.Entity() .Property(e => e.SourceUrlSlug) .HasMaxLength(16); builder.Entity() .Property(e => e.OldTag) .HasMaxLength(16); builder.Entity() .Property(e => e.OldTagPageUrl) .HasMaxLength(32); builder.Entity() .Property(e => e.Language) .HasMaxLength(8); builder.Entity() .Property(e => e.PoemSummary) .HasMaxLength(3000); builder.Entity() .HasIndex(i => new { i.GanjoorCommentId, i.UserId }) .IsUnique(); builder.Entity() .HasIndex(i => new { i.PoemId, i.UserId }); builder.Entity() .HasIndex(i => new { i.PoemId, i.SortKey }); builder.Entity() .HasIndex(i => new { i.PoemId, i.CommentDate }); } /// /// Picture Files /// public DbSet PictureFiles { get; set; } /// /// Item Attributes /// public DbSet Tags { get; set; } /// /// Artifacts /// public DbSet Artifacts { get; set; } /// /// Items /// public DbSet Items { get; set; } /// /// Import Jobs /// public DbSet ImportJobs { get; set; } /// /// Tags /// public DbSet TagValues { get; set; } /// /// User Bookmarks /// public DbSet UserBookmarks { get; set; } /// /// User Notes /// public DbSet UserNotes { get; set; } /// /// Ganjoor Links /// public DbSet GanjoorLinks { get; set; } /// /// Pinterest Links /// public DbSet PinterestLinks { get; set; } /// /// Ganjoor Audio Files /// public DbSet Recitations { get; set; } /// /// Upload Sessions /// public DbSet UploadSessions { get; set; } /// /// Uploaded files /// public DbSet UploadedFiles { get; set; } /// /// User Recitation Profiles /// public DbSet UserRecitationProfiles { get; set; } /// /// Ganjoor Poets /// public DbSet GanjoorPoets { get; set; } /// /// Ganjoor Categories /// public DbSet GanjoorCategories { get; set; } /// /// Ganjoor Poems /// public DbSet GanjoorPoems { get; set; } /// /// Semantic search query log — see SemanticSearchQueryLog for what is (and deliberately /// isn't) recorded /// public DbSet SemanticSearchQueryLogs { get; set; } /// /// Ganjoor Verses /// public DbSet GanjoorVerses { get; set; } /// /// Narration Publishing Tracker /// public DbSet RecitationPublishingTrackers { get; set; } /// /// Ganjoor Pages /// public DbSet GanjoorPages { get; set; } /// /// Ganjoor Metres /// public DbSet GanjoorMetres { get; set; } /// /// singers /// public DbSet GanjoorSingers { get; set; } /// /// music tracks /// public DbSet GanjoorMusicCatalogueTracks { get; set; } /// /// golha tracks /// public DbSet GolhaTracks { get; set; } /// /// GolhaCollection /// public DbSet GolhaCollections { get; set; } /// /// GolhaPrograms /// public DbSet GolhaPrograms { get; set; } /// /// PoemMusicTracks /// public DbSet GanjoorPoemMusicTracks { get; set; } /// /// Ganjoor Comments /// public DbSet GanjoorComments { get; set; } /// /// Ganjoor Reported Comments /// public DbSet GanjoorReportedComments { get; set; } /// /// Ganjoor Page Snapshots /// public DbSet GanjoorPageSnapshots { get; set; } /// /// Ganjoor Site Bannaers /// public DbSet GanjoorSiteBanners { get; set; } /// /// Ganjoor Health Check Errors /// public DbSet GanjoorHealthCheckErrors { get; set; } /// /// donations /// public DbSet GanjoorDonations { get; set; } /// /// expenses /// public DbSet GanjoorExpenses { get; set; } /// /// donation expenditures /// public DbSet DonationExpenditure { get; set; } /// /// poem corrections /// public DbSet GanjoorPoemCorrections { get; set; } /// /// languages for translation /// public DbSet GanjoorLanguages { get; set; } /// /// ganjoor bookmarks /// public DbSet GanjoorUserBookmarks { get; set; } /// /// ganjoor numbering schemas /// public DbSet GanjoorNumberings { get; set; } /// /// ganjoor verse numbers /// public DbSet GanjoorVerseNumbers { get; set; } /// /// ganjoor half centuries /// public DbSet GanjoorCenturies { get; set; } /// /// ganjoor cities /// public DbSet GanjoorGeoLocations { get; set; } /// /// related poems to each poem (having same rhyme letters and prosody metre) /// public DbSet GanjoorCachedRelatedPoems { get; set; } /// /// Reported User Notes /// public DbSet ReportedUserNotes { get; set; } /// /// recitation error reports /// public DbSet RecitationErrorReports { get; set; } /// /// recitation user up votes /// public DbSet RecitationUserUpVotes { get; set; } /// /// recitation approved mistakes /// public DbSet RecitationApprovedMistakes { get; set; } /// /// probable metres /// public DbSet GanjoorPoemProbableMetres { get; set; } /// /// ganjoor user history track items (stored by his or her choice) /// public DbSet GanjoorUserPoemVisits { get; set; } /// /// suggested spec line for poets /// public DbSet GanjoorPoetSuggestedSpecLines { get; set; } /// /// suggested pictures for poets /// public DbSet GanjoorPoetSuggestedPictures { get; set; } /// /// faq categories /// public DbSet FAQCategories { get; set; } /// /// faq items /// public DbSet FAQItems { get; set; } /// /// Temporary Model contianing duplicated poems information /// public DbSet GanjoorDuplicates { get; set; } /// /// poem sections /// public DbSet GanjoorPoemSections { get; set; } /// /// related sections to each section (having same rhyme letters and prosody metre) /// public DbSet GanjoorCachedRelatedSections { get; set; } /// /// section correctons /// public DbSet GanjoorPoemSectionCorrections { get; set; } /// /// Updating related sections logs /// public DbSet UpdatingRelSectsLogs{ get; set; } /// /// PoemGeoDateTags /// public DbSet PoemGeoDateTags { get; set; } /// /// People tags /// public DbSet GanjoorRelatedPersons { get; set; } /// /// Books (PDF Library) /// public DbSet Books { get; set; } /// /// Authurs /// public DbSet Authors { get; set; } /// /// Multi Volume PDF Collections /// public DbSet MultiVolumePDFCollections { get; set; } /// /// PDF Books /// public DbSet PDFBooks { get; set; } /// /// PDF Pages /// public DbSet PDFPages { get; set; } /// /// PDF Sources /// public DbSet PDFSources { get; set; } /// /// Queued FTP Uploads /// public DbSet QueuedFTPUploads { get; set; } /// /// PDF Ganjoor Links /// public DbSet PDFGanjoorLinks { get; set; } /// /// OCR Queue Items /// public DbSet OCRQueuedItems { get; set; } /// /// PDF Download Queue /// public DbSet QueuedPDFBooks { get; set; } /// /// Related Poems /// public DbSet GanjoorQuotedPoems { get; set; } /// /// discover quoted q items /// public DbSet DiscoverQuotedQueueItems { get; set; } /// /// paper sources /// public DbSet GanjoorPaperSources { get; set; } /// /// digital sources /// public DbSet DigitalSources { get; set; } /// /// Category Word Counts /// public DbSet CategoryWordCounts { get; set; } /// /// Category Word Count Summaries /// public DbSet CategoryWordCountSummaries { get; set; } /// /// tajik poets /// public DbSet TajikPoets { get; set; } /// /// tajik cats /// public DbSet TajikCats { get; set; } /// /// tajik poems /// public DbSet TajikPoems { get; set; } /// /// tajik verse /// public DbSet TajikVerses { get; set; } /// /// tajik pages /// public DbSet TajikPages { get; set; } /// /// ganjoor cat corrections /// public DbSet GanjoorCatCorrections { get; set; } /// /// comment reactions /// public DbSet GanjoorCommentReactions { get; set; } } }