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(); return await connection.InsertAsync(expediente); }*/ 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> GetAllAsync() { using var connection = await _connectionFactory.CreateConnectionAsync(); if (connection.State == System.Data.ConnectionState.Open) { /*var result = await connection.QueryAsync( @"SELECT id, nombre, apellidos, fecha_nacimiento::timestamp as fecha_nacimiento, -- Convertir a timestamp sexo, nombre_padre, nombre_madre, nombre_responsable, parentesco_responsable, direccion, telefono, observaciones, foto_url, fecha_creacion, fecha_actualizacion, activo FROM expedientes ORDER BY nombre" );*/ 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(); // Con Dapper.Contrib return await connection.UpdateAsync(expediente); } } }