using InABox.Core; namespace InABox.Database; public delegate void LogEvent(LogType type, string message); public interface IProviderFactory { string URL { get; set; } Type[] Types { get; set; } void ForceRecreateViews(); void Start(); IProvider NewProvider(Logger logger); } public interface IProvider { Logger Logger { get; set; } IEnumerable List(Filter? filter = null, Columns? columns = null, SortOrder? sort = null, CoreRange? range = null) where T : Entity, new(); CoreTable Query(Filter? filter = null, Columns? columns = null, SortOrder? sort = null, CoreRange? range = null, bool log = false, bool distinct = false) where T : Entity, new(); CoreTable Query(Type type, IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, CoreRange? range = null, bool log = false, bool distinct = false); /// /// Same as , but only for deleted items /// /// /// /// /// /// /// /// /// CoreTable QueryDeleted(Deletion deletion, Filter? filter = null, Columns? columns = null, SortOrder? sort = null, CoreRange? range = null, bool deleted = false) where T : Entity, new(); T[] Load(Filter? filter = null, SortOrder? sort = null, CoreRange? range = null) where T : Entity, new(); void Save(T entity) where T : Entity; void Save(IEnumerable entities) where T : Entity; void Save(Type type, Entity entity); void Save(Type type, IEnumerable entities); void Delete(T entity, string userID) where T : Entity, new(); void Delete(IEnumerable entities, string userID) where T : Entity, new(); void Purge(T entity) where T : Entity; void Purge(IEnumerable entities) where T : Entity; void Purge(Deletion deletion); void Recover(Deletion deletion); List GetDeletionTypes(Deletion deletion); }