using backend.Auth; using backend.Conversations; using backend.Devices; using backend.Pairing; using backend.Settings; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace backend.Data; public class AppDbContext(DbContextOptions options) : IdentityDbContext, Guid>(options) { public DbSet Devices => Set(); public DbSet DeviceConfigs => Set(); public DbSet SystemSettings => Set(); public DbSet PairingCodes => Set(); public DbSet Conversations => Set(); public DbSet Turns => Set(); protected override void OnModelCreating(ModelBuilder b) { base.OnModelCreating(b); b.Entity() .HasOne() .WithMany() .HasForeignKey(d => d.OwnerUserId) .OnDelete(DeleteBehavior.Cascade); b.Entity().HasIndex(d => d.TokenHash).IsUnique(); b.Entity() .HasOne(d => d.Config) .WithOne() .HasForeignKey(c => c.DeviceId) .OnDelete(DeleteBehavior.Cascade); b.Entity().HasKey(c => c.DeviceId); b.Entity().HasKey(s => s.Id); b.Entity().Property(s => s.Id).ValueGeneratedNever(); b.Entity().HasKey(p => p.Code); b.Entity().HasIndex(p => p.ExpiresAt); b.Entity().HasIndex(c => c.DeviceId); b.Entity() .HasMany(c => c.Turns) .WithOne() .HasForeignKey(t => t.ConversationId) .OnDelete(DeleteBehavior.Cascade); b.Entity().HasIndex(t => new { t.ConversationId, t.Index }).IsUnique(); } }