using FictionArchive.Service.Shared.Services.Database; using FictionArchive.Service.UserNovelDataService.Models.Database; using Microsoft.EntityFrameworkCore; namespace FictionArchive.Service.UserNovelDataService.Services; public class UserNovelDataServiceDbContext : FictionArchiveDbContext { public DbSet Users { get; set; } public DbSet Bookmarks { get; set; } public DbSet Novels { get; set; } public DbSet Volumes { get; set; } public DbSet Chapters { get; set; } public UserNovelDataServiceDbContext(DbContextOptions options, ILogger logger) : base(options, logger) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(entity => { // Unique constraint: one bookmark per chapter per user entity.HasIndex(b => new { b.UserId, b.ChapterId }).IsUnique(); // Index for efficient "get bookmarks for novel" queries entity.HasIndex(b => new { b.UserId, b.NovelId }); // User relationship entity.HasOne(b => b.User) .WithMany() .HasForeignKey(b => b.UserId) .OnDelete(DeleteBehavior.Cascade); }); } }