using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Microsoft.EntityFrameworkCore; using Novelly.Api.Activity; using Novelly.Api.Agent; using Novelly.Api.Beats; using Novelly.Api.Chapters; using Novelly.Api.Characters; using Novelly.Api.Genres; using Novelly.Api.Imports; using Novelly.Api.Locations; using Novelly.Api.Novels; using Novelly.Api.Questions; using Novelly.Api.Tags; using Novelly.Api.Users; namespace Novelly.Api.Data; internal class UtcTicksConverter() : ValueConverter(value => value.UtcTicks, ticks => new DateTimeOffset(ticks, TimeSpan.Zero)); public class NovelDbContext(DbContextOptions options) : IdentityUserContext(options), INovelDbContext { public DbSet Novels => Set(); public DbSet Characters => Set(); public DbSet CharacterRelationships => Set(); public DbSet CharacterArcStages => Set(); public DbSet Beats => Set(); public DbSet Tags => Set(); public DbSet Locations => Set(); public DbSet Chapters => Set(); public DbSet OpenQuestions => Set(); public DbSet Conversations => Set(); public DbSet AgentMessages => Set(); public DbSet ImportJobs => Set(); public DbSet Genres => Set(); public DbSet NovelMembers => Set(); public DbSet ActivityEvents => Set(); Task INovelDbContext.SaveChangesAsync(CancellationToken cancellationToken) => base.SaveChangesAsync(cancellationToken); protected override void ConfigureConventions(ModelConfigurationBuilder builder) => builder.Properties().HaveConversion(); protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.ApplyConfigurationsFromAssembly(typeof(NovelDbContext).Assembly); } } public interface INovelDbContext { DbSet Novels { get; } DbSet Characters { get; } DbSet CharacterRelationships { get; } DbSet CharacterArcStages { get; } DbSet Beats { get; } DbSet Tags { get; } DbSet Locations { get; } DbSet Chapters { get; } DbSet OpenQuestions { get; } DbSet Conversations { get; } DbSet AgentMessages { get; } DbSet ImportJobs { get; } DbSet Genres { get; } DbSet Users { get; } DbSet NovelMembers { get; } DbSet ActivityEvents { get; } Task SaveChangesAsync(CancellationToken cancellationToken = default); }