using Microsoft.EntityFrameworkCore; using Rs_system.Models; namespace Rs_system.Data; public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } public DbSet Personas { get; set; } public DbSet Usuarios { get; set; } public DbSet RolesSistema { get; set; } public DbSet RolesUsuario { get; set; } public DbSet Permisos { get; set; } public DbSet Modulos { get; set; } public DbSet RolesPermisos { get; set; } public DbSet Configuraciones { get; set; } public DbSet AsistenciasCulto { get; set; } // Offerings module public DbSet RegistrosCulto { get; set; } public DbSet Ofrendas { get; set; } public DbSet DescuentosOfrenda { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Configure composite key for RolUsuario modelBuilder.Entity() .HasKey(ru => new { ru.UsuarioId, ru.RolId }); // Configure relationships modelBuilder.Entity() .HasOne(ru => ru.Usuario) .WithMany(u => u.RolesUsuario) .HasForeignKey(ru => ru.UsuarioId); modelBuilder.Entity() .HasOne(ru => ru.Rol) .WithMany(r => r.RolesUsuario) .HasForeignKey(ru => ru.RolId); // Configure composite key for RolPermiso modelBuilder.Entity() .HasKey(rp => new { rp.RolId, rp.PermisoId }); modelBuilder.Entity() .HasOne(rp => rp.Rol) .WithMany(r => r.RolesPermisos) .HasForeignKey(rp => rp.RolId); modelBuilder.Entity() .HasOne(rp => rp.Permiso) .WithMany() .HasForeignKey(rp => rp.PermisoId); modelBuilder.Entity() .HasOne(p => p.Modulo) .WithMany(m => m.Permisos) .HasForeignKey(p => p.ModuloId); modelBuilder.Entity() .HasOne(u => u.Persona) .WithMany() .HasForeignKey(u => u.PersonaId); // Global configuration: Convert all dates to UTC when saving foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { var properties = entityType.GetProperties() .Where(p => p.ClrType == typeof(DateTime) || p.ClrType == typeof(DateTime?)); foreach (var property in properties) { property.SetValueConverter(new Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter( v => v.Kind == DateTimeKind.Utc ? v : DateTime.SpecifyKind(v, DateTimeKind.Utc), v => v)); } } } }