156 lines
4.6 KiB
C#
156 lines
4.6 KiB
C#
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<int> CreateAsync(Expediente expediente)
|
|
{
|
|
using var connection = await _connectionFactory.CreateConnectionAsync();
|
|
return await connection.InsertAsync(expediente);
|
|
}*/
|
|
|
|
public async Task<int> 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<int>(sql, parameters);
|
|
}
|
|
|
|
|
|
public async Task<bool> 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<IEnumerable<Expediente?>> GetAllAsync()
|
|
{
|
|
using var connection = await _connectionFactory.CreateConnectionAsync();
|
|
|
|
if (connection.State == System.Data.ConnectionState.Open) {
|
|
/*var result = await connection.QueryAsync<Expediente>(
|
|
@"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<Expediente>(
|
|
@"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<Expediente?> GetByIdAsync(int id)
|
|
{
|
|
using var connection = await _connectionFactory.CreateConnectionAsync();
|
|
|
|
Expediente? expediente = await connection.QueryFirstOrDefaultAsync<Expediente>(
|
|
"select *from expedientes where id = @Id",
|
|
new { Id = id }
|
|
);
|
|
return expediente;
|
|
}
|
|
|
|
public async Task<bool> UpdateAsync(Expediente expediente)
|
|
{
|
|
using var connection = await _connectionFactory.CreateConnectionAsync();
|
|
|
|
// Con Dapper.Contrib
|
|
return await connection.UpdateAsync(expediente);
|
|
}
|
|
}
|
|
}
|