140 lines
4.7 KiB
C#
140 lines
4.7 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Asistencia.Models;
|
|
|
|
namespace Asistencia.Data;
|
|
|
|
public class AppDbContext : DbContext
|
|
{
|
|
public DbSet<Profesor> Profesores => Set<Profesor>();
|
|
public DbSet<Curso> Cursos => Set<Curso>();
|
|
public DbSet<CursoAbierto> CursosAbiertos => Set<CursoAbierto>();
|
|
public DbSet<DetalleContrato> DetallesContrato => Set<DetalleContrato>();
|
|
public DbSet<AsistenciaProfesor> AsistenciasProfesor => Set<AsistenciaProfesor>();
|
|
public DbSet<AsistenciaAlumno> AsistenciasAlumno => Set<AsistenciaAlumno>();
|
|
|
|
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<CursoAbierto>()
|
|
.HasOne(c => c.Curso)
|
|
.WithMany()
|
|
.HasForeignKey(c => c.IdCursos);
|
|
|
|
modelBuilder.Entity<DetalleContrato>()
|
|
.HasOne(d => d.CursoAbierto)
|
|
.WithMany()
|
|
.HasForeignKey(d => d.IdCursoAbierto);
|
|
|
|
modelBuilder.Entity<AsistenciaProfesor>()
|
|
.HasOne(a => a.CursoAbierto)
|
|
.WithMany()
|
|
.HasForeignKey(a => a.IdCursoAbierto);
|
|
|
|
modelBuilder.Entity<AsistenciaAlumno>()
|
|
.HasKey(a => new { a.IdDetalleContrato, a.FechaAsistencia });
|
|
|
|
modelBuilder.Entity<AsistenciaAlumno>()
|
|
.HasOne(a => a.DetalleContrato)
|
|
.WithMany()
|
|
.HasForeignKey(a => a.IdDetalleContrato);
|
|
|
|
SeedData(modelBuilder);
|
|
}
|
|
|
|
private static void SeedData(ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<Profesor>().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<Curso>().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<CursoAbierto>().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<DetalleContrato>().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"
|
|
}
|
|
);
|
|
}
|
|
}
|