using InABox.Core; namespace InABox.Database { public interface IStore { bool IsSubStore { get; set; } Guid UserGuid { get; set; } string UserID { get; set; } string Platform { get; set; } string Version { get; set; } IProvider Provider { get; set; } // Called once at Database Startup to initialise caches etc void Init(); IEnumerable List(Filter? filter = null, Columns? columns = null, SortOrder? sort = null); CoreTable Query(Filter? filter = null, Columns? columns = null, SortOrder? sort = null); Entity[] Load(Filter? filter = null, SortOrder? sort = null); void Save(Entity entity, string auditnote); void Save(IEnumerable entities, string auditnote); void Delete(Entity entity, string auditnote); void Delete(IEnumerable entities, string auditnote); void BulkUpdate(IEnumerable entities); } public interface IStore : IStore where T : Entity, new() { IEnumerable List(Filter? filter = null, Columns? columns = null, SortOrder? sort = null); CoreTable Query(Filter? filter = null, Columns? columns = null, SortOrder? sort = null); T[] Load(Filter? filter = null, SortOrder? sort = null); void Save(T entity, string auditnote); void Save(IEnumerable entities, string auditnote); void Delete(T entity, string auditnote); void Delete(IEnumerable entities, string auditnote); void BulkUpdate(IEnumerable entities); //void ResetAggregate(T entity, Expression> link, params IAggregate[] aggregates) where TSource : Entity, new(); //DoubleAggregate Sum(Expression> source, Expression> target) where TTarget : Entity, new(); //TimeSpanAggregate Sum(Expression> source, Expression> target) where TTarget : Entity, new(); //IntegerAggregate Sum(Expression> source, Expression> target) where TTarget : Entity, new(); //DoubleAggregate Count(Expression> target) where TTarget : Entity, new(); //TimeSpanAggregate Count(Expression> target) where TTarget : Entity, new(); //IntegerAggregate Count(Expression> target) where TTarget : Entity, new(); } }