Clasificaciones - AndresRamos/ARSoftware.Contpaqi.Comercial GitHub Wiki
La clase admClasificaciones
representa el modelo de SQL con el esquema completo de la tabla de clasificaciones en la base de datos. Se utiliza principalmente para consultar el catalogo de clasificaciones cuando se necesita obtener el esquema completo.
public partial class admClasificaciones
{
public int CIDCLASIFICACION { get; set; }
public string CNOMBRECLASIFICACION { get; set; } = null!;
}
El proyecto incluye repositorios que implementan la interfaz IClasificacionRepository<T>
que proporciona metodos que puedes utilizar para consultar el catalogo clasificaciones.
Los repositorios disponibles para SDK son:
-
ClasificacionSdkRepository<T>
- ImplementaIClasificacionRepository<T>
El repositorio ClasificacionSdkRepository<T>
utiliza reflection para buscar los valores de la propiedades del tipo T
en el modelo de SQL admClasificaciones
por lo que debes asegurarte que las propiedades del tipo T
tengan el mismo nombre que las columnas de la tabla admClasificaciones
en la base de datos.
Los repositorios disponibles para SQL son:
-
ClasificacionSqlRepository<T>
- ImplementaIClasificacionSqlRepository<T>
.IClasificacionSqlRepository<T>
hereda deIClasificacionRepository<T>
y define las versiones asincronas de los metodos para beneficiarse del uso de Entity Framework Core.
El repositorio ClasificacionSqlRepository<T>
utiliza AutoMapper para proyectar el modelo de SQL admClasificaciones
al tipo del parametro T
por lo debes crear una configuracion de mapeo con AutoMapper para que funcione.
/// <summary>
/// Interfaz de repositorio que define métodos para consultar clasificaciones.
/// </summary>
/// <typeparam name="T">
/// El tipo de clasificación utilizado por el repositorio.
/// </typeparam>
public interface IClasificacionRepository<T> where T : class, new()
{
/// <summary>
/// Busca una clasificación por id.
/// </summary>
/// <param name="idClasificacion">
/// Id de la clasificación a buscar.
/// </param>
/// <returns>
/// Una clasificación, o <see langword="null" /> si no existe una clasificación con el id proporcionado.
/// </returns>
T? BuscarPorId(int idClasificacion);
/// <summary>
/// Busca una clasificación por tipo y número.
/// </summary>
/// <param name="tipoClasificacion">
/// Tipo de la clasificación a buscar.
/// </param>
/// <param name="numeroClasificacion">
/// Número de la clasificación a buscar.
/// </param>
/// <returns>
/// Una clasificación, o <see langword="null" /> si no existe una clasificación con el tipo y número proporcionados.
/// </returns>
T? BuscarPorTipoYNumero(TipoClasificacion tipoClasificacion, NumeroClasificacion numeroClasificacion);
/// <summary>
/// Busca todas las clasificaciones de un tipo.
/// </summary>
/// <param name="tipoClasificacion">
/// Tipo de las clasificaciones a buscar.
/// </param>
/// <returns>
/// Lista de clasificaciones.
/// </returns>
List<T> TraerPorTipo(TipoClasificacion tipoClasificacion);
/// <summary>
/// Busca todas las clasificaciones.
/// </summary>
/// <returns>
/// Lista de clasificaciones.
/// </returns>
List<T> TraerTodo();
}
/// <inheritdoc cref="IClasificacionRepository{T}" />
public interface IClasificacionSqlRepository<T> : IClasificacionRepository<T> where T : class, new()
{
/// <summary>
/// Busca una clasificación por id.
/// </summary>
/// <param name="idClasificacion">
/// Id de la clasificación a buscar.
/// </param>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Una clasificación, o <see langword="null" /> si no existe una clasificación con el id proporcionado.
/// </returns>
Task<T?> BuscarPorIdAsyc(int idClasificacion, CancellationToken cancellationToken);
/// <summary>
/// Busca una clasificación por tipo y número.
/// </summary>
/// <param name="tipoClasificacion">
/// Tipo de la clasificación a buscar.
/// </param>
/// <param name="numeroClasificacion">
/// Número de la clasificación a buscar.
/// </param>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Una clasificación, o <see langword="null" /> si no existe una clasificación con el tipo y número proporcionados.
/// </returns>
Task<T?> BuscarPorTipoYNumeroAsync(TipoClasificacion tipoClasificacion, NumeroClasificacion numeroClasificacion,
CancellationToken cancellationToken);
/// <summary>
/// Busca todas las clasificaciones de un tipo.
/// </summary>
/// <param name="tipoClasificacion">
/// Tipo de las clasificaciones a buscar.
/// </param>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Lista de clasificaciones.
/// </returns>
Task<List<T>> TraerPorTipoAsync(TipoClasificacion tipoClasificacion, CancellationToken cancellationToken);
/// <summary>
/// Busca todas las clasificaciones.
/// </summary>
/// <param name="cancellationToken">
/// Token de cancelación.
/// </param>
/// <returns>
/// Lista de clasificaciones.
/// </returns>
Task<List<T>> TraerTodoAsync(CancellationToken cancellationToken);
}
public sealed class BuscarClasificacionesConRepositorio
{
private readonly IClasificacionRepository<admClasificaciones> _clasificacionRepository;
// private readonly IClasificacionRepository<TuModelo> _clasificacionRepository;
public BuscarClasificacionesConRepositorio(IClasificacionRepository<admClasificaciones> clasificacionRepository)
{
_clasificacionRepository = clasificacionRepository;
}
}
public void BuscarPorId()
{
var idClasificacion = 1;
admClasificaciones? clasificacion = _clasificacionRepository.BuscarPorId(idClasificacion);
_logger.LogInformation("{@Clasificacion}", clasificacion);
}
public void BuscarPorTipoYNumero()
{
var tipoClasificacion = TipoClasificacion.Producto;
var numeroClasificacion = NumeroClasificacion.Uno;
admClasificaciones? clasificacion = _clasificacionRepository.BuscarPorTipoYNumero(tipoClasificacion, numeroClasificacion);
_logger.LogInformation("{@Clasificacion}", clasificacion);
}
public void TraerPorTipo()
{
var tipoClasificacion = TipoClasificacion.Producto;
List<admClasificaciones> clasificaciones = _clasificacionRepository.TraerPorTipo(tipoClasificacion);
_logger.LogInformation("{@Clasificaciones}", clasificaciones);
}
public void TraerTodo()
{
List<admClasificaciones> clasificaciones = _clasificacionRepository.TraerTodo();
_logger.LogInformation("{@Clasificaciones}", clasificaciones);
}