using System; using System.Collections.Generic; using InABox.Core; namespace InABox.Clients { public interface IClient { IValidationData Validate(string userid, string password, Guid session = default); IValidationData Validate(string pin, Guid session = default); IValidationData Validate(Guid session); CoreTable Query(object? filter = null, object? columns = null, object? sort = null, CoreRange? range = null); Entity[] Load(object? filter = null, object? sort = null, CoreRange? range = null); void Save(object entity, string auditnote); void Save(IEnumerable entities, string auditnote); void Delete(object entity, string auditnote); void Delete(IEnumerable entities, string auditnote); Dictionary QueryMultiple(Dictionary queries); void QueryMultiple(Action?, Exception?> callback, Dictionary queries); bool Check2FA(string code, Guid? session = null); /// /// Check if the server is running /// /// true if the server is running bool Ping(); /// /// Get general information about this server /// /// DatabaseInfo DatabaseInfo? Info(); string Version(); string ReleaseNotes(); byte[]? Installer(); IEnumerable SupportedTypes(); event LogEvent OnLog; bool IsConnected(); } public interface IClient : IClient where TEntity : Entity, new() { 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 callback); TEntity[] Load(Filter? filter = null, SortOrder? sort = null, CoreRange? range = null); void Load(Filter? filter, SortOrder? sort, CoreRange? range, Action callback); void Save(TEntity entity, string auditnote); void Save(IEnumerable entities, string auditnote); void Save(TEntity entity, string auditnote, Action callback); void Save(IEnumerable entity, string auditnote, Action, Exception?> callback); void Delete(TEntity entity, string auditnote); void Delete(IEnumerable entities, string auditnote); void Delete(TEntity entity, string auditnote, Action callback); void Delete(IEnumerable entity, string auditnote, Action, Exception?> callback); } }