using System; using System.Collections.Generic; using System.Text; namespace InABox.Core { public interface IQueryProvider { bool ExcludeCustomProperties { get; set; } CoreTable Query(IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, CoreRange? range = null); } public interface IQueryProvider : IQueryProvider { CoreTable Query(Filter? filter = null, Columns? columns = null, SortOrder? sort = null, CoreRange? range = null); void Query(Filter? filter, Columns? columns, SortOrder? sort, CoreRange? range, Action action); void Save(T entity, string auditNote); void Save(IEnumerable entities, string auditNote); void Save(T entity, string auditnote, Action callback); void Save(IEnumerable entities, string auditnote, Action, Exception?> callback); void Delete(T entity, string auditNote); void Delete(IEnumerable entities, string auditNote); void Delete(T entity, string auditnote, Action callback); void Delete(IEnumerable entities, string auditnote, Action, Exception?> callback); } public interface IQueryProviderFactory { bool ExcludeCustomProperties { get; } IQueryProvider Create(Type T); IQueryProvider Create() where T : BaseObject, new() { var result = (Create(typeof(T)) as IQueryProvider)!; result.ExcludeCustomProperties = ExcludeCustomProperties; return result; } } public static class QueryProviderFactoryExtensions { public static CoreTable Query(this IQueryProviderFactory factory, Filter? filter = null, Columns? columns = null, SortOrder? sort = null, CoreRange? range = null) where T : BaseObject, new() { return factory.Create().Query(filter, columns, sort, range); } public static void Query(this IQueryProviderFactory factory, Filter? filter, Columns? columns, SortOrder? sort, CoreRange? range, Action action) where T : BaseObject, new() { factory.Create().Query(filter, columns, sort, range, action); } public static void Save(this IQueryProviderFactory factory, T entity, string auditNote) where T : BaseObject, new() { factory.Create().Save(entity, auditNote); } public static void Save(this IQueryProviderFactory factory, IEnumerable entities, string auditNote) where T : BaseObject, new() { factory.Create().Save(entities, auditNote); } public static void Delete(this IQueryProviderFactory factory, T entity, string auditNote) where T : BaseObject, new() { factory.Create().Delete(entity, auditNote); } } }