Agregar archivos de proyecto.

This commit is contained in:
2025-12-25 09:54:32 -06:00
parent 42d745e5e1
commit be7d5ef10d
99 changed files with 85993 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
using Dapper;
using MieSystem.Data.Interfaces;
using Npgsql;
using System.Data;
namespace MieSystem.Data.Repositories
{
public class DatabaseConnectionFactory : IDatabaseConnectionFactory
{
private readonly IConfiguration _configuration;
private readonly string? _connectionString;
public DatabaseConnectionFactory(IConfiguration configuration)
{
_configuration = configuration;
_connectionString = _configuration.GetConnectionString("PostgreSQL");
// Mapear tipos de PostgreSQL a .NET
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
NpgsqlConnection.GlobalTypeMapper.UseJsonNet();
}
public IDbConnection CreateConnection()
{
var connection = new NpgsqlConnection(_connectionString);
// Configuración adicional
connection.Open();
connection.ReloadTypes(); // Para tipos custom de PostgreSQL
return connection;
}
public async Task<IDbConnection> CreateConnectionAsync()
{
var connection = new NpgsqlConnection(_connectionString);
await connection.OpenAsync();
await connection.ReloadTypesAsync();
return connection;
}
}
}

View File

@@ -0,0 +1,155 @@
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);
}
}
}