Empresas - AndresRamos/ARSoftware.Contpaqi.Comercial GitHub Wiki
La clase Empresas
representa el modelo del SQL con el esquema completo de la tabla de empresas en la base de datos. Se utiliza principalmente para consultar el catalogo de empresas cuando se necesita obtener el esquema completo.
public partial class Empresas
{
public int CIDEMPRESA { get; set; }
public string CNOMBREEMPRESA { get; set; } = null!;
public string CRUTADATOS { get; set; } = null!;
public string CRUTARESPALDOS { get; set; } = null!;
}
La clase EmpresaDto
representa un modelo de empresa simplificado. Se utiliza principalmente para consultar el catalogo de empresas cuando solo se necesitan algunas propiedades. Las propiedades de este modelo tienen los los mismos nombres que las propiedades del modelo de SQL para facilitar la asignacion de valores cuando se utiliza con los repositorios genericos de empresas, como por ejemplo los que implementan IEmpresaRepository<T>
de EmpresaDto
.
public class EmpresaDto
{
/// <summary>
/// Id de la empresa.
/// </summary>
public int CIDEMPRESA { get; set; }
/// <summary>
/// Nombre de la empresa.
/// </summary>
public string CNOMBREEMPRESA { get; set; } = string.Empty;
/// <summary>
/// Ruta de la empresa.
/// </summary>
public string CRUTADATOS { get; set; } = string.Empty;
}
El proyecto incluye repositorios que implementan la interfaz IEmpresaRepository<T>
que proporciona metodos que puedes utilizar para consultar el catalogo de empresas.
Los repositorios disponibles para SDK son:
-
EmpresaSdkRepository
- ImplementaIEmpresaRepository<Empresas>
Los repositorios disponibles para SQL son:
-
EmpresaSqlRepository<T>
- ImplementaIEmpresaSqlRepository<T>
.IEmpresaSqlRepository<T>
hereda deIEmpresaRepository<T>
y define las versiones asincronas de los metodos para beneficiarse del uso de Entity Framework Core.
El repositorio EmpresaSqlRepository<T>
utiliza AutoMapper para proyectar el modelo de SQL Empresas
al tipo del parametro T
por lo que debes crear una configuracion de mapeo con AutoMapper para que funcione. El poyecto ya incluye una configuracion de mapeo para EmpresaDto
.
/// <summary>
/// Interfaz de repositorio que define métodos para consultar empresas.
/// </summary>
/// <typeparam name="T">
/// El tipo de empresa utilizado por el repositorio.
/// </typeparam>
public interface IEmpresaRepository<T> where T : class, new()
{
/// <summary>
/// Busca una empresa por su nombre.
/// </summary>
/// <param name="nombreEmpresa">
/// Nombre de la empresa a buscar.
/// </param>
/// <returns>
/// Una empresa, o <see langword="null" /> si no existe una empresa con el nombre proporcionado.
/// </returns>
T? BuscarPorNombre(string nombreEmpresa);
/// <summary>
/// Busca todas las empresas.
/// </summary>
/// <returns>
/// Lista de empresas.
/// </returns>
List<T> TraerTodo();
}
/// <inheritdoc cref="IEmpresaRepository{T}" />
public interface IEmpresaSqlRepository<T> : IEmpresaRepository<T> where T : class, new()
{
/// <summary>
/// Busca una empresa por su nombre.
/// </summary>
/// <param name="nombreEmpresa">
/// Nombre de la empresa a buscar.
/// </param>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Una empresa, o <see langword="null" /> si no existe una empresa con el nombre proporcionado.
/// </returns>
Task<T?> BuscarPorNombreAsync(string nombreEmpresa, CancellationToken cancellationToken);
/// <summary>
/// Busca todas las empresas.
/// </summary>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Lista de empresas.
/// </returns>
Task<List<T>> TraerTodoAsync(CancellationToken cancellationToken);
}
public sealed class BuscarEmpresasConRepositorio
{
private readonly IEmpresaRepository<Empresas> _empresaRepository;
// private readonly IEmpresaRepository<EmpresaDto> _empresaRepository;
// private readonly IEmpresaRepository<TuModelo> _empresaRepository;
public BuscarEmpresasConRepositorio(IEmpresaRepository<Empresas> empresaRepository)
{
_empresaRepository = empresaRepository;
}
}
public void BuscarPorNombre()
{
var nombreEmpresa = "EMPRESA PRUEBA";
Empresas? empresa = _empresaRepository.BuscarPorNombre(nombreEmpresa);
_logger.LogInformation("{@Empresa}", empresa);
}
public void TraerTodo()
{
List<Empresas> empresas = _empresaRepository.TraerTodo();
_logger.LogInformation("{@Empresas}", empresas);
}