using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using WhiteLagoon.Application.Common.Interfaces; using WhiteLagoon.Domain.Entities; using WhiteLagoon.Infrastructure.Data; namespace WhiteLagoon.Infrastructure.Repository { public class Repository : IRepository where T : class { private readonly ApplicationDbContext _db; internal DbSet dbSet; public Repository(ApplicationDbContext db) { _db = db; dbSet = _db.Set(); } public void Add(T entity) { dbSet.Add(entity); } public bool Any(Expression> filter) { return dbSet.Any(filter); } public T Get(Expression> filter, string? includeProperties = null, bool tracked = false) { IQueryable query; if (tracked) { query = dbSet; } else { query=dbSet.AsNoTracking(); } if (filter != null) { query = query.Where(filter); } if (!string.IsNullOrEmpty(includeProperties)) { //Villa,VillaNumber -- case sensitive foreach (var includeProp in includeProperties .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProp.Trim()); } } return query.FirstOrDefault(); } public IEnumerable GetAll(Expression>? filter = null, string? includeProperties = null, bool tracked = false) { IQueryable query; if (tracked) { query = dbSet; } else { query = dbSet.AsNoTracking(); } if (filter != null) { query = query.Where(filter); } if (!string.IsNullOrEmpty(includeProperties)) { foreach (var includeProp in includeProperties .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProp.Trim()); } } return query.ToList(); } public void Remove(T entity) { dbSet.Remove(entity); } } }