using CalendarReminder.Domain.Entities; using Microsoft.EntityFrameworkCore; namespace CalendarReminder.Api.Data; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } public DbSet Reminders => Set(); public DbSet Users => Set(); public DbSet Families => Set(); public DbSet ReminderShares => Set(); public DbSet PasswordResetTokens => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.Title).IsRequired().HasMaxLength(200); entity.Property(e => e.Description).HasMaxLength(1000); entity.HasOne(e => e.User) .WithMany(u => u.Reminders) .HasForeignKey(e => e.UserId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => e.Email).IsUnique(); entity.HasIndex(e => e.Username).IsUnique(); entity.Property(e => e.Email).IsRequired().HasMaxLength(200); entity.Property(e => e.Username).IsRequired().HasMaxLength(100); entity.HasOne(e => e.Family) .WithMany(f => f.Users) .HasForeignKey(e => e.FamilyId) .OnDelete(DeleteBehavior.SetNull); }); modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => e.Name).IsUnique(); entity.Property(e => e.Name).IsRequired().HasMaxLength(100); }); modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => new { e.ReminderId, e.SharedWithUserId }).IsUnique(); entity.HasOne(e => e.Reminder) .WithMany(r => r.Shares) .HasForeignKey(e => e.ReminderId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(e => e.SharedWithUser) .WithMany() .HasForeignKey(e => e.SharedWithUserId) .OnDelete(DeleteBehavior.Cascade); }); } }