using Microsoft.EntityFrameworkCore; using QMax.Api.Data.Entities; namespace QMax.Api.Data; public sealed class QMaxDbContext(DbContextOptions options) : DbContext(options) { public DbSet Users => Set(); public DbSet UserSessions => Set(); public DbSet Chats => Set(); public DbSet Messages => Set(); public DbSet MessageAttachments => Set(); public DbSet MessageReactions => Set(); public DbSet PushDevices => Set(); public DbSet MaxAccountStates => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasIndex(x => x.PhoneNumber); modelBuilder.Entity().HasIndex(x => x.RefreshTokenHash).IsUnique(); modelBuilder.Entity().HasIndex(x => x.ExternalId).IsUnique(); modelBuilder.Entity().HasIndex(x => new { x.ChatId, x.SentAt }); modelBuilder.Entity().HasIndex(x => x.ExternalId); modelBuilder.Entity().HasIndex(x => x.StorageFileName).IsUnique(); modelBuilder.Entity().HasIndex(x => new { x.MessageId, x.ExternalId }); modelBuilder.Entity().HasIndex(x => new { x.MessageId, x.ActorKey }).IsUnique(); modelBuilder.Entity().HasIndex(x => x.FirebaseToken).IsUnique(); modelBuilder.Entity() .Property(x => x.Kind) .HasConversion(); modelBuilder.Entity() .Property(x => x.Direction) .HasConversion(); modelBuilder.Entity() .Property(x => x.DeliveryState) .HasConversion(); modelBuilder.Entity() .Property(x => x.Kind) .HasConversion(); modelBuilder.Entity() .HasMany(x => x.Attachments) .WithOne(x => x.Message) .HasForeignKey(x => x.MessageId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasMany(x => x.Reactions) .WithOne(x => x.Message) .HasForeignKey(x => x.MessageId) .OnDelete(DeleteBehavior.Cascade); } }