using LANCommander.Data.Models; using Microsoft.EntityFrameworkCore; using System.Linq.Expressions; namespace LANCommander.Data { public class Repository : IDisposable where T : BaseModel { private DbContext Context; private HttpContext HttpContext; public Repository(DatabaseContext context, HttpContext httpContext) { Context = context; HttpContext = httpContext; } private DbSet DbSet { get { return Context.Set(); } } private DbSet UserDbSet { get { return Context.Set(); } } public IQueryable Get(Expression> predicate) { return DbSet.AsQueryable().Where(predicate); } public async Task Find(Guid id) { return await DbSet.FindAsync(id); } public T FirstOrDefault(Expression> predicate) { return Get(predicate).FirstOrDefault(); } public async Task Add(T entity) { entity.CreatedBy = GetCurrentUser(); entity.UpdatedBy = GetCurrentUser(); entity.CreatedOn = DateTime.Now; entity.UpdatedOn = DateTime.Now; await Context.AddAsync(entity); return entity; } public T Update(T entity) { entity.UpdatedBy = GetCurrentUser(); entity.UpdatedOn = DateTime.Now; Context.Update(entity); return entity; } public void Delete(T entity) { Context.Remove(entity); } public async Task SaveChanges() { await Context.SaveChangesAsync(); } private User GetUser(string username) { return UserDbSet.FirstOrDefault(u => u.UserName == username); } private User GetCurrentUser() { if (HttpContext != null && HttpContext.User != null && HttpContext.User.Identity != null && HttpContext.User.Identity.IsAuthenticated) { var user = GetUser(HttpContext.User.Identity.Name); if (user == null) return null; else return user; } else return null; } public void Dispose() { } } }