using Azure; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; using MTWorkHR.Core.Entities.Base; using MTWorkHR.Core.IDto; using MTWorkHR.Core.IRepositories.Base; using MTWorkHR.Infrastructure.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MTWorkHR.Infrastructure.Repositories { public class Repository : IRepository where T : Entity { protected readonly HRDataContext _context; private readonly DbSet dbSet; public Repository(HRDataContext context) { _context = context; dbSet = context.Set(); } public async Task AddAsync(T entity) { await _context.AddAsync(entity); await _context.SaveChangesAsync(); return entity; } public async Task> AddRangeAsync(IList entities) { await dbSet.AddRangeAsync(entities); return entities; } public async Task DeleteAsync(T entity) { dbSet.Remove(entity); } public async Task DeleteRangeAsync(IEnumerable entities) { dbSet.RemoveRange(entities); } public async Task, int>> GetAllAsync() { var query = dbSet.AsQueryable(); var total = await query.CountAsync(); return new Tuple, int>(await query.ToListAsync(), total); } //public virtual async Task, int>> GetAllAsync(IPagingInputDto pagingInputDto) //{ // //var query = dbSet.AsQueryable(); // //if (pagingInputDto.HiddenFilter != null) // //{ // // query = query.Where(pagingInputDto.HiddenFilter); // //} // //if (pagingInputDto.Filter != null) // //{ // // var props = typeof(T).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(FilterAttribute))); // // var condition = ""; // // foreach (var p in props) // // { // // condition = (condition == "" ? condition : condition + " || ") + p.Name + ".Contains(@0)"; // // } // // query = query.Where(condition, pagingInputDto.Filter); // //} // //var order = query.OrderBy(pagingInputDto.OrderByField + " " + pagingInputDto.OrderType); // //var page = order.Skip((pagingInputDto.PageNumber * pagingInputDto.PageSize) - pagingInputDto.PageSize).Take(pagingInputDto.PageSize); // //var total = await query.CountAsync(); // //return new Tuple, int>(await page.ToListAsync(), total); // throw new NotImplementedException(); //} public async Task GetByIdAsync(long id) { return await _context.Set().FindAsync(id); } } }