using BMA.EHR.Application.Common.Interfaces; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using System.Security.Claims; namespace BMA.EHR.Application.Repositories { public class GenericRepository : IGenericRepository where T : class { #region " Field " private readonly IApplicationDBContext _dbContext; private readonly DbSet _dbSet; private readonly IHttpContextAccessor _httpContextAccessor; #endregion #region " Constructor and Destructor " public GenericRepository(IApplicationDBContext dbContext, IHttpContextAccessor httpContextAccessor) { _dbContext = dbContext; _dbSet = _dbContext.Set(); _httpContextAccessor = httpContextAccessor; } #endregion #region " Properties " protected string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; protected string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; #endregion #region " Methods " public virtual async Task> GetAllAsync() { return await _dbSet.ToListAsync(); } public virtual async Task GetByIdAsync(S id) { return await _dbSet.FindAsync(id); } public virtual async Task AddAsync(T entity) { //if (entity is IAuditableEntity) //{ // (entity as IAuditableEntity).CreatedUserId = Guid.Parse(UserId); // (entity as IAuditableEntity).CreatedUserFullName = FullName; // (entity as IAuditableEntity).CreatedDate = DateTime.Now; //} await _dbSet.AddAsync(entity); await _dbContext.SaveChangesAsync(); return entity; } public virtual async Task UpdateAsync(T entity) { //if (entity is IAuditableEntity) //{ // (entity as IAuditableEntity).ModifiedUserId = Guid.Parse(UserId); // (entity as IAuditableEntity).ModifiedUserFullName = FullName; // (entity as IAuditableEntity).ModifiedDate = DateTime.Now; //} _dbSet.Update(entity); await _dbContext.SaveChangesAsync(); return entity; } public virtual async Task DeleteAsync(T entity) { _dbSet.Remove(entity); await _dbContext.SaveChangesAsync(); } #endregion } }