[FA-24] Reading lists
All checks were successful
CI / build-backend (pull_request) Successful in 1m32s
CI / build-frontend (pull_request) Successful in 42s

This commit is contained in:
gamer147
2026-01-19 22:06:34 -05:00
parent 98ae4ea4f2
commit 48ee43c4f6
34 changed files with 2607 additions and 2 deletions

View File

@@ -11,6 +11,8 @@ public class UserNovelDataServiceDbContext : FictionArchiveDbContext
public DbSet<Novel> Novels { get; set; }
public DbSet<Volume> Volumes { get; set; }
public DbSet<Chapter> Chapters { get; set; }
public DbSet<ReadingList> ReadingLists { get; set; }
public DbSet<ReadingListItem> ReadingListItems { get; set; }
public UserNovelDataServiceDbContext(DbContextOptions options, ILogger<UserNovelDataServiceDbContext> logger) : base(options, logger)
{
@@ -34,5 +36,32 @@ public class UserNovelDataServiceDbContext : FictionArchiveDbContext
.HasForeignKey(b => b.UserId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<ReadingList>(entity =>
{
// Index for fetching user's lists
entity.HasIndex(r => r.UserId);
// User relationship with cascade delete
entity.HasOne(r => r.User)
.WithMany()
.HasForeignKey(r => r.UserId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<ReadingListItem>(entity =>
{
// Unique constraint: one entry per novel per list
entity.HasIndex(i => new { i.ReadingListId, i.NovelId }).IsUnique();
// Index for efficient ordered retrieval
entity.HasIndex(i => new { i.ReadingListId, i.Order });
// ReadingList relationship with cascade delete
entity.HasOne(i => i.ReadingList)
.WithMany(r => r.Items)
.HasForeignKey(i => i.ReadingListId)
.OnDelete(DeleteBehavior.Cascade);
});
}
}