< Summary

Information
Class: FAU.DataAccess.ApplicationDbContext
Assembly: FAU.DataAccess
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/ApplicationDbContext.cs
Line coverage
100%
Covered lines: 127
Uncovered lines: 0
Coverable lines: 127
Total lines: 181
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Personas()100%11100%
get_Usuarios()100%11100%
get_Roles()100%11100%
get_Permisos()100%11100%
get_Acciones()100%11100%
get_Contextos()100%11100%
get_BitacorasAuditoria()100%11100%
get_Bancos()100%11100%
get_CuentasBancarias()100%11100%
get_TiposBeneficio()100%11100%
get_BeneficiosSociales()100%11100%
get_RelacionesLaborales()100%11100%
get_MovimientosLaborales()100%11100%
get_Regimenes()100%11100%
get_Escalafones()100%11100%
get_Grados()100%11100%
get_Situaciones()100%11100%
get_Programas()100%11100%
get_Unidades()100%11100%
get_Companias()100%11100%
get_TiposMovimiento()100%11100%
OnModelCreating(...)100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/ApplicationDbContext.cs

#LineLine coverage
 1using FAU.Entidades;
 2using Microsoft.EntityFrameworkCore;
 3
 4namespace FAU.DataAccess;
 5
 6public class ApplicationDbContext : DbContext
 7{
 1288    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
 9    {
 12810    }
 11
 12    // DbSets para las entidades principales
 16213    public DbSet<Persona> Personas { get; set; }
 15414    public DbSet<Usuario> Usuarios { get; set; }
 15315    public DbSet<Rol> Roles { get; set; }
 15216    public DbSet<Permiso> Permisos { get; set; }
 12917    public DbSet<Accion> Acciones { get; set; }
 12918    public DbSet<Contexto> Contextos { get; set; }
 13019    public DbSet<BitacoraAuditoria> BitacorasAuditoria { get; set; }
 17420    public DbSet<Banco> Bancos { get; set; }
 12821    public DbSet<CuentaBancaria> CuentasBancarias { get; set; }
 16222    public DbSet<TipoBeneficio> TiposBeneficio { get; set; }
 13123    public DbSet<BeneficioSocial> BeneficiosSociales { get; set; }
 24
 25    // Personal y catálogos
 21226    public DbSet<RelacionLaboral> RelacionesLaborales { get; set; }
 13927    public DbSet<MovimientoLaboral> MovimientosLaborales { get; set; }
 17128    public DbSet<Regimen> Regimenes { get; set; }
 16029    public DbSet<Escalafon> Escalafones { get; set; }
 17430    public DbSet<Grado> Grados { get; set; }
 16031    public DbSet<Situacion> Situaciones { get; set; }
 16032    public DbSet<Programa> Programas { get; set; }
 16133    public DbSet<Unidad> Unidades { get; set; }
 12834    public DbSet<Compania> Companias { get; set; }
 13835    public DbSet<TipoMovimiento> TiposMovimiento { get; set; }
 36
 37    protected override void OnModelCreating(ModelBuilder modelBuilder)
 38    {
 139        base.OnModelCreating(modelBuilder);
 40
 41        // Configuración de la relación muchos a muchos entre Usuario y Rol
 142        modelBuilder.Entity<Usuario>()
 143            .HasMany(u => u.Roles)
 144            .WithMany(r => r.Usuarios)
 145            .UsingEntity<Dictionary<string, object>>(
 146                "usuarios_roles",
 147                j => j.HasOne<Rol>().WithMany().HasForeignKey("rol_id"),
 148                j => j.HasOne<Usuario>().WithMany().HasForeignKey("usuario_id"),
 149                j =>
 150                {
 151                    j.HasKey("usuario_id", "rol_id");
 152                    j.ToTable("usuarios_roles");
 153                }
 154            );
 55
 56        // Configuración de la relación muchos a muchos entre Rol y Permiso
 157        modelBuilder.Entity<Rol>()
 158            .HasMany(r => r.Permisos)
 159            .WithMany(p => p.Roles)
 160            .UsingEntity<Dictionary<string, object>>(
 161                "roles_permisos",
 162                j => j.HasOne<Permiso>().WithMany().HasForeignKey("permiso_id"),
 163                j => j.HasOne<Rol>().WithMany().HasForeignKey("rol_id"),
 164                j =>
 165                {
 166                    j.HasKey("permiso_id", "rol_id");
 167                    j.ToTable("roles_permisos");
 168                }
 169            );
 70
 71        // Índices únicos
 172        modelBuilder.Entity<Persona>()
 173            .HasIndex(p => p.Cedula)
 174            .IsUnique();
 75
 176        modelBuilder.Entity<Usuario>()
 177            .HasIndex(u => u.Username)
 178            .IsUnique();
 79
 180        modelBuilder.Entity<Rol>()
 181            .HasIndex(r => r.Nombre)
 182            .IsUnique();
 83
 184        modelBuilder.Entity<Permiso>()
 185            .HasIndex(p => p.Nombre)
 186            .IsUnique();
 87
 188        modelBuilder.Entity<Accion>()
 189            .HasIndex(a => a.Nombre)
 190            .IsUnique();
 91
 192        modelBuilder.Entity<Contexto>()
 193            .HasIndex(c => c.Nombre)
 194            .IsUnique();
 95
 196        modelBuilder.Entity<Banco>()
 197            .HasIndex(b => b.Codigo)
 198            .IsUnique();
 99
 1100        modelBuilder.Entity<TipoBeneficio>()
 1101            .HasIndex(tb => tb.Codigo)
 1102            .IsUnique();
 103
 104        // Índices para catálogos
 1105        modelBuilder.Entity<Regimen>()
 1106            .HasIndex(r => r.NumeroLey)
 1107            .IsUnique();
 108
 1109        modelBuilder.Entity<Escalafon>()
 1110            .HasIndex(e => e.Codigo)
 1111            .IsUnique();
 112
 1113        modelBuilder.Entity<Situacion>()
 1114            .HasIndex(s => s.Codigo)
 1115            .IsUnique();
 116
 1117        modelBuilder.Entity<Programa>()
 1118            .HasIndex(p => p.Codigo)
 1119            .IsUnique();
 120
 1121        modelBuilder.Entity<Unidad>()
 1122            .HasIndex(u => u.Codigo)
 1123            .IsUnique();
 124
 1125        modelBuilder.Entity<Compania>()
 1126            .HasIndex(c => c.Codigo)
 1127            .IsUnique();
 128
 129        // Índices para relaciones laborales
 1130        modelBuilder.Entity<RelacionLaboral>()
 1131            .HasIndex(rl => new { rl.PersonaId, rl.Estado });
 132
 1133        modelBuilder.Entity<RelacionLaboral>()
 1134            .HasIndex(rl => rl.GradoId);
 135
 1136        modelBuilder.Entity<BeneficioSocial>()
 1137            .HasIndex(bs => new { bs.PersonaId, bs.Estado });
 138
 1139        modelBuilder.Entity<BeneficioSocial>()
 1140            .HasIndex(bs => new { bs.TipoBeneficioId, bs.Estado });
 141
 142        // Índice para búsqueda de auditoría por entidad
 1143        modelBuilder.Entity<BitacoraAuditoria>()
 1144            .HasIndex(b => new { b.Entidad, b.EntidadId });
 145
 146        // Configurar checks
 1147        modelBuilder.Entity<Usuario>()
 2148            .ToTable(t => t.HasCheckConstraint("CK_usuarios_estado",
 2149                "estado IN ('activo', 'bloqueado')"));
 150
 1151        modelBuilder.Entity<CuentaBancaria>()
 2152            .ToTable(t => t.HasCheckConstraint("CK_cuentas_bancarias_estado",
 2153                "estado IN ('activa', 'inactiva')"));
 154
 155        // Configure conversion for RelacionLaboral.Estado enum to store string values compatible with existing DB
 1156        modelBuilder.Entity<RelacionLaboral>()
 1157            .Property(rl => rl.Estado)
 1158            .HasConversion(
 1159                v => v == EstadoRelacion.Activo ? "activo" : "inactivo",
 1160                v => v == "activo" ? EstadoRelacion.Activo : EstadoRelacion.Inactivo
 1161            );
 162
 1163        modelBuilder.Entity<RelacionLaboral>()
 2164            .ToTable(t => t.HasCheckConstraint("CK_relaciones_laborales_estado",
 2165                "estado IN ('activo', 'inactivo')"));
 166
 1167        modelBuilder.Entity<TipoBeneficio>()
 2168            .ToTable(t => t.HasCheckConstraint("CK_tipos_beneficio_plazo_no_negativo",
 2169                "plazo_presentacion_dias IS NULL OR plazo_presentacion_dias >= 0"));
 170
 1171        modelBuilder.Entity<TipoBeneficio>()
 2172            .ToTable(t => t.HasCheckConstraint("CK_tipos_beneficio_monto_no_negativo",
 2173                "monto_referencia IS NULL OR monto_referencia >= 0"));
 174
 1175        modelBuilder.Entity<BeneficioSocial>()
 2176            .ToTable(t => t.HasCheckConstraint("CK_beneficios_sociales_estado",
 2177                "estado IN ('activo', 'inactivo', 'pendiente_doc')"));
 1178    }
 179}
 180
 181