using Microsoft.EntityFrameworkCore; using Asistencia.Models; namespace Asistencia.Data; public class AppDbContext : DbContext { public DbSet Profesores => Set(); public DbSet Cursos => Set(); public DbSet CursosAbiertos => Set(); public DbSet DetallesContrato => Set(); public DbSet AsistenciasProfesor => Set(); public DbSet AsistenciasAlumno => Set(); public string DbPath { get; } public AppDbContext() { var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var appFolder = Path.Combine(folder, "Asistencia"); Directory.CreateDirectory(appFolder); DbPath = Path.Combine(appFolder, "asistencia.db"); } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite($"Data Source={DbPath}"); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasOne(c => c.Curso) .WithMany() .HasForeignKey(c => c.IdCursos); modelBuilder.Entity() .HasOne(d => d.CursoAbierto) .WithMany() .HasForeignKey(d => d.IdCursoAbierto); modelBuilder.Entity() .HasOne(a => a.CursoAbierto) .WithMany() .HasForeignKey(a => a.IdCursoAbierto); modelBuilder.Entity() .HasKey(a => new { a.IdDetalleContrato, a.FechaAsistencia }); modelBuilder.Entity() .HasOne(a => a.DetalleContrato) .WithMany() .HasForeignKey(a => a.IdDetalleContrato); SeedData(modelBuilder); } private static void SeedData(ModelBuilder modelBuilder) { modelBuilder.Entity().HasData( new Profesor { RutPasaporte = "12345678-9", Nombre = "Juan", Paterno = "Perez", Materno = "Gonzalez", Email = "juan.perez@norteamericano.cl", Fono = "+56912345678", Direccion = "Av. Providencia 1234, Santiago", Clave = "", CrearClave = true } ); modelBuilder.Entity().HasData( new Curso { IdCursos = 1, NombreCurso = "English Basic A1" }, new Curso { IdCursos = 2, NombreCurso = "English Intermediate B1" }, new Curso { IdCursos = 3, NombreCurso = "English Advanced C1" } ); modelBuilder.Entity().HasData( new CursoAbierto { IdCursoAbierto = 1, IdCursos = 1, Sala = "Sala 101", Sede = "Providencia", HoraInicio = "09:00", HoraFin = "10:30", FechaInicio = new DateTime(2026, 3, 1), FechaTermino = new DateTime(2026, 7, 31), ProfesorRun = "12345678-9" }, new CursoAbierto { IdCursoAbierto = 2, IdCursos = 2, Sala = "Sala 202", Sede = "Las Condes", HoraInicio = "14:00", HoraFin = "15:30", FechaInicio = new DateTime(2026, 3, 1), FechaTermino = new DateTime(2026, 7, 31), ProfesorRun = "12345678-9" } ); modelBuilder.Entity().HasData( new DetalleContrato { IdDetalleContrato = 1, IdCursoAbierto = 1, AP_Paterno = "Garcia", AP_Materno = "Lopez", Nombres = "Maria", Email = "maria.garcia@email.com", Telefono = "+56998765432" }, new DetalleContrato { IdDetalleContrato = 2, IdCursoAbierto = 1, AP_Paterno = "Rodriguez", AP_Materno = "Soto", Nombres = "Carlos", Email = "carlos.rodriguez@email.com", Telefono = "+56987654321" }, new DetalleContrato { IdDetalleContrato = 3, IdCursoAbierto = 2, AP_Paterno = "Martinez", AP_Materno = "Fernandez", Nombres = "Ana", Email = "ana.martinez@email.com", Telefono = "+56976543210" } ); } }