using Gremlin_BlazorServer.Data.DBClasses; using Gremlin_BlazorServer.Data.EntityClasses; using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace Gremlin_BlazorServer.Services; public class GenericController { private readonly GremlinDb gremlinDb = new(); public IList GetAll() where TResult : class, IMetadata { return gremlinDb.Set().ToList(); } public IList GetAll(string include) where TResult : class, IMetadata { return gremlinDb.Set().Include(include).ToList(); } public IList GetAll(Predicate search) where TResult : class, IMetadata { return gremlinDb.Set().AsEnumerable().Where(t => search(t)).ToList(); } public IList GetAll(Predicate search, string include) where TResult : class, IMetadata { return gremlinDb.Set().Include(include).AsEnumerable().Where(t => search(t)).ToList(); } public TResult? Get(Predicate search) where TResult : class, IMetadata { return gremlinDb.Set().AsEnumerable().FirstOrDefault(t => search(t)); } public TResult? Get(Predicate search, string include) where TResult : class, IMetadata { return gremlinDb.Set().Include(include).AsEnumerable().FirstOrDefault(t => search(t)); } public TResult GetLast() where TResult : class, IMetadata { return gremlinDb.Set().AsEnumerable().Last(); } public bool Insert(T entity) where T : class, IMetadata { try { gremlinDb.Set().Add(entity); if (typeof(T) == typeof(Account)) { Account account = entity as Account; System.Console.WriteLine($"Added {account.SapAccountNumber}:{account.AccountName} to database, try to save..."); } return gremlinDb.SaveChanges() > 0; } catch (Exception exception) { Console.WriteLine(exception.InnerException); return false; } } public bool Insert(List entities) where T : class, IMetadata { try { gremlinDb.Set().AddRange(entities); return gremlinDb.SaveChanges() > 0; } catch (Exception exception) { Console.WriteLine(exception.InnerException); return false; } } public bool IsExisting(Predicate search) where T : class, IMetadata { return gremlinDb.Set().AsEnumerable().Any(t => search(t)); } }