using Dapper; using Dapper.Contrib.Extensions; using MieSystem.Data.Interfaces; using MieSystem.Models; namespace MieSystem.Data.Repositories { public class ExpedienteRepository : IExpedienteRepository { private readonly IDatabaseConnectionFactory _connectionFactory; public ExpedienteRepository(IDatabaseConnectionFactory databaseConnectionFactory) { _connectionFactory = databaseConnectionFactory; } public async Task CreateAsync(Expediente expediente) { using var connection = await _connectionFactory.CreateConnectionAsync(); var sql = @" INSERT INTO expedientes ( nombre, apellidos, fecha_nacimiento, sexo, nombre_padre, nombre_madre, nombre_responsable, parentesco_responsable, direccion, telefono, observaciones, foto_url, fecha_creacion, fecha_actualizacion, activo ) VALUES ( @Nombre, @Apellidos, @FechaNacimiento, @Sexo, @NombrePadre, @NombreMadre, @NombreResponsable, @ParentescoResponsable, @Direccion, @Telefono, @Observaciones, @FotoUrl, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, @Activo ) RETURNING id"; var parameters = new { expediente.Nombre, expediente.Apellidos, FechaNacimiento = expediente.FechaNacimiento.Date, // Solo fecha expediente.Sexo, expediente.NombrePadre, expediente.NombreMadre, expediente.NombreResponsable, expediente.ParentescoResponsable, expediente.Direccion, expediente.Telefono, expediente.Observaciones, expediente.FotoUrl, expediente.Activo }; return await connection.ExecuteScalarAsync(sql, parameters); } public async Task DeleteAsync(int id) { using var connection = await _connectionFactory.CreateConnectionAsync(); var sql = "DELETE FROM expedientes WHERE id = @Id"; var affected = await connection.ExecuteAsync(sql, new { Id = id }); return affected > 0; } public async Task> GetActivosAsync() { using var connection = await _connectionFactory.CreateConnectionAsync(); if (connection.State == System.Data.ConnectionState.Open) { var result = await connection.QueryAsync(@"SELECT * FROM expedientes where activo = True ORDER BY nombre"); return result; } else { System.Diagnostics.Debug.WriteLine("Estado de la conexion es:" + connection.State); return null; } } public async Task> GetAllAsync() { using var connection = await _connectionFactory.CreateConnectionAsync(); if (connection.State == System.Data.ConnectionState.Open) { var result = await connection.QueryAsync( @"SELECT * FROM expedientes ORDER BY nombre" ); return result; } else { System.Diagnostics.Debug.WriteLine("Estado de la conexion es:" + connection.State); return null; } } public async Task GetByIdAsync(int id) { using var connection = await _connectionFactory.CreateConnectionAsync(); Expediente? expediente = await connection.QueryFirstOrDefaultAsync( "select *from expedientes where id = @Id", new { Id = id } ); return expediente; } public async Task UpdateAsync(Expediente expediente) { using var connection = await _connectionFactory.CreateConnectionAsync(); var sql = @" UPDATE expedientes SET nombre = @Nombre, apellidos = @Apellidos, fecha_nacimiento = @FechaNacimiento, sexo = @Sexo, nombre_padre = @NombrePadre, nombre_madre = @NombreMadre, nombre_responsable = @NombreResponsable, parentesco_responsable = @ParentescoResponsable, direccion = @Direccion, telefono = @Telefono, observaciones = @Observaciones, foto_url = @FotoUrl, fecha_actualizacion = CURRENT_TIMESTAMP, activo = @Activo WHERE id = @Id"; var parameters = new { expediente.Id, expediente.Nombre, expediente.Apellidos, FechaNacimiento = expediente.FechaNacimiento.Date, // Solo fecha expediente.Sexo, expediente.NombrePadre, expediente.NombreMadre, expediente.NombreResponsable, expediente.ParentescoResponsable, expediente.Direccion, expediente.Telefono, expediente.Observaciones, expediente.FotoUrl, expediente.Activo }; var affectedRows = await connection.ExecuteAsync(sql, parameters); return affectedRows > 0; } } }