using Microsoft.EntityFrameworkCore; namespace Nexus.Api.Data; public sealed class NexusDbContext(DbContextOptions options) : DbContext(options) { public DbSet Projects => Set(); public DbSet Tasks => Set(); public DbSet Activity => Set(); public DbSet Users => Set(); public DbSet RefreshTokens => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().Property(x => x.Name).HasMaxLength(160); modelBuilder.Entity(entity => { entity.Property(x => x.Title).HasMaxLength(240); entity.Property(x => x.Detail).HasMaxLength(2000); entity.Property(x => x.Source).HasMaxLength(60); entity.Property(x => x.AssignedTo).HasMaxLength(60); entity.HasIndex(x => x.Source); entity.HasIndex(x => x.AssignedTo); }); modelBuilder.Entity().Property(x => x.Message).HasMaxLength(1000); modelBuilder.Entity().HasIndex(u => u.NormalizedEmail).IsUnique(); modelBuilder.Entity().HasIndex(r => r.TokenHash).IsUnique(); modelBuilder.Entity().HasIndex(r => new { r.UserId, r.FamilyId }); modelBuilder.Entity().Property(r => r.ConcurrencyStamp).IsConcurrencyToken(); modelBuilder.Entity() .HasOne(r => r.User) .WithMany(u => u.RefreshTokens) .HasForeignKey(r => r.UserId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity().HasIndex(x => x.CreatedAt); } }