Files
FictionArchive/FictionArchive.Service.NovelService/Services/NovelServiceDbContext.cs

57 lines
2.1 KiB
C#

using FictionArchive.Service.NovelService.Models;
using FictionArchive.Service.NovelService.Models.Images;
using FictionArchive.Service.NovelService.Models.Localization;
using FictionArchive.Service.NovelService.Models.Novels;
using FictionArchive.Service.NovelService.Sagas;
using FictionArchive.Service.Shared.Services.Database;
using Microsoft.EntityFrameworkCore;
namespace FictionArchive.Service.NovelService.Services;
public class NovelServiceDbContext(DbContextOptions options, ILogger<NovelServiceDbContext> logger)
: FictionArchiveDbContext(options, logger)
{
public DbSet<Novel> Novels { get; set; }
public DbSet<Volume> Volumes { get; set; }
public DbSet<Chapter> Chapters { get; set; }
public DbSet<Source> Sources { get; set; }
public DbSet<TranslationEngine> TranslationEngines { get; set; }
public DbSet<NovelTag> Tags { get; set; }
public DbSet<LocalizationKey> LocalizationKeys { get; set; }
public DbSet<LocalizationRequest> LocalizationRequests { get; set; }
public DbSet<Image> Images { get; set; }
public DbSet<ActiveImport> ActiveImports { get; set; }
public DbSet<NovelImportSagaState> NovelImportSagaStates { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Novel>()
.HasIndex("ExternalId", "SourceId")
.IsUnique();
// Volume.Order is unique per Novel
modelBuilder.Entity<Volume>()
.HasIndex("NovelId", "Order")
.IsUnique();
// Chapter.Order is unique per Volume
modelBuilder.Entity<Chapter>()
.HasIndex("VolumeId", "Order")
.IsUnique();
modelBuilder.Entity<ActiveImport>(entity =>
{
entity.HasKey(e => e.ImportId);
entity.HasIndex(e => e.NovelUrl).IsUnique();
});
modelBuilder.Entity<NovelImportSagaState>(entity =>
{
entity.HasKey(e => e.CorrelationId);
entity.HasIndex(e => e.NovelUrl);
entity.HasIndex(e => e.CurrentState);
});
}
}