< Summary

Information
Class: CoWorkingApp.API.Infrastructure.Persistence.Repositories.RepositoryGeneric<T>
Assembly: CoWorkingApp.API
File(s): H:\Vicentico\Proyectos\CoWorkingApp Project\CoWorkingApp\CoWorkingApp.API\Infrastructure\Persistence\Repositories\RepositoryGeneric.cs
Line coverage
100%
Covered lines: 44
Uncovered lines: 0
Coverable lines: 44
Total lines: 133
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%2100%
GetAllAsync()100%1100%
GetByIdAsync()100%1100%
AddAsync()100%1100%
UpdateAsync()100%1100%
RemoveAsync()100%1100%
ExistsAsync()100%1100%

File(s)

H:\Vicentico\Proyectos\CoWorkingApp Project\CoWorkingApp\CoWorkingApp.API\Infrastructure\Persistence\Repositories\RepositoryGeneric.cs

#LineLine coverage
 1using CoWorkingApp.API.Infrastructure.UnitOfWorks;
 2using CoWorkingApp.Core.Application.Contracts.Repositories;
 3using Microsoft.EntityFrameworkCore;
 4
 5namespace CoWorkingApp.API.Infrastructure.Persistence.Repositories
 6{
 7    /// <summary>
 8    /// Clase genérica que implementa la interfaz IRepository y proporciona operaciones básicas de acceso a datos.
 9    /// </summary>
 10    /// <typeparam name="T">Tipo de entidad.</typeparam>
 11    public abstract class RepositoryGeneric<T> : IRepository<T> where T : class
 12    {
 13        private readonly IUnitOfWork _unitOfWork;
 14        protected readonly DbSet<T> _dbSet;
 15
 16        /// <summary>
 17        /// Constructor que recibe una instancia de IUnitOfWork para gestionar la conexión con la base de datos.
 18        /// </summary>
 19        /// <param name="unitOfWork">Instancia de IUnitOfWork.</param>
 6120        public RepositoryGeneric(IUnitOfWork unitOfWork)
 6121        {
 6122            _unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork));
 5823            _dbSet = _unitOfWork.Context.Set<T>();
 5824        }
 25
 26        /// <summary>
 27        /// Obtiene todos los registros de la entidad de la base de datos de manera asincrónica.
 28        /// </summary>
 29        /// <returns>Una colección de todos los registros de la entidad.</returns>
 30        public virtual async Task<IEnumerable<T>> GetAllAsync()
 431        {
 432            return await _dbSet
 433                .AsNoTracking()
 434                .ToListAsync();
 435        }
 36
 37        /// <summary>
 38        /// Obtiene un registro por su identificador único de manera asincrónica.
 39        /// </summary>
 40        /// <param name="id">Identificador único del registro.</param>
 41        /// <returns>El registro con el identificador único especificado, o null si no se encuentra.</returns>
 42        public virtual async Task<T> GetByIdAsync(Guid id)
 443        {
 444            return await _dbSet.FindAsync(id);
 445        }
 46
 47        /// <summary>
 48        /// Agrega un nuevo registro a la base de datos de manera asincrónica.
 49        /// </summary>
 50        /// <param name="entity">Entidad a agregar.</param>
 51        /// <returns>True si se agregó correctamente; de lo contrario, false.</returns>
 52        public virtual async Task<bool> AddAsync(T entity)
 853        {
 54            try
 855            {
 56                // Agrega la entidad al conjunto de entidades del contexto
 857                _dbSet.Add(entity);
 58
 59                // Guarda los cambios en la base de datos
 560                await _unitOfWork.Commit();
 61
 62                // Retorna true indicando que la operación fue exitosa
 563                return true;
 64            }
 365            catch (Exception)
 366            {
 67                // Retorna false si ocurre alguna excepción al agregar la entidad
 368                return false;
 69            }
 870        }
 71
 72        /// <summary>
 73        /// ACTualiza un registro existente en la base de datos de manera asincrónica.
 74        /// </summary>
 75        /// <param name="entity">Entidad a actualizar.</param>
 76        /// <returns>True si se actualizó correctamente; de lo contrario, false.</returns>
 77        public virtual async Task<bool> UpdateAsync(T entity)
 778        {
 79            try
 780            {
 81                // Adjunta la entidad al contexto y marca su estado como modificado
 782                _dbSet.Attach(entity);
 483                _unitOfWork.Context.Entry(entity).State = EntityState.Modified;
 84
 85                // Guarda los cambios en la base de datos
 486                await _unitOfWork.Commit();
 87
 88                // Retorna true indicando que la operación fue exitosa
 489                return true;
 90            }
 391            catch (Exception)
 392            {
 93                // Retorna false si ocurre alguna excepción al actualizar la entidad
 394                return false;
 95            }
 796        }
 97
 98        /// <summary>
 99        /// Elimina un registro de la base de datos de manera asincrónica.
 100        /// </summary>
 101        /// <param name="entity">Entidad a eliminar.</param>
 102        /// <returns>True si se eliminó correctamente; de lo contrario, false.</returns>
 103        public virtual async Task<bool> RemoveAsync(T entity)
 6104        {
 105            try
 6106            {
 107                // Remueve la entidad del conjunto de entidades del contexto
 6108                _dbSet.Remove(entity);
 109
 110                // Guarda los cambios en la base de datos
 3111                await _unitOfWork.Commit();
 112
 113                // Retorna true indicando que la operación fue exitosa
 3114                return true;
 115            }
 3116            catch (Exception)
 3117            {
 118                // Retorna false si ocurre alguna excepción al eliminar la entidad
 3119                return false;
 120            }
 6121        }
 122
 123        /// <summary>
 124        /// Verifica si un elemento existe en la entidad de manera asincrónica.
 125        /// </summary>
 126        /// <param name="id">Identificador del elemento.</param>
 127        /// <returns>True si el elemento existe; de lo contrario, false.</returns>
 128        public virtual async Task<bool> ExistsAsync(Guid id)
 6129        {
 6130            return await _dbSet.FindAsync(id) is not null;
 6131        }
 132    }
 133}