123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Threading.Tasks;
- using InABox.Core;
- namespace InABox.Clients
- {
- public abstract class BaseClient<TEntity> : IClient<TEntity>, IClient where TEntity : Entity, new()
- {
- public BaseClient()
- {
- Timeout = new TimeSpan(0, 1, 0);
- }
-
- public TimeSpan Timeout { get; set; }
- public abstract IEnumerable<string> SupportedTypes();
- public abstract bool IsConnected();
- public event LogEvent? OnLog;
- protected void RaiseLogEvent(LogType type, String userid, string format, params object[] parameters) => OnLog?.Invoke(type, userid, format, parameters);
-
- public DataTable LoadDataTable(Columns<TEntity> columns, object[][] data)
- {
- var result = new DataTable(typeof(TEntity).EntityName());
- var cols = CoreUtils.GetColumns(columns);
- foreach (var col in cols.Items)
- result.Columns.Add(col.Property, col.Expression.Type);
- result.BeginLoadData();
- foreach (var row in data.AsEnumerable())
- result.LoadDataRow(row, true);
- result.EndLoadData();
- return result;
- }
-
- #region Validation
- public virtual IValidationData Validate(string userid, string password, Guid session)
- {
- return DoValidate(userid, password, session);
- }
- protected abstract IValidationData DoValidate(string userid, string password, Guid session = default);
- public virtual IValidationData Validate(string pin, Guid session)
- {
- return DoValidate(pin, session);
- }
- protected abstract IValidationData DoValidate(string pin, Guid session = default);
-
- public virtual IValidationData Validate(Guid session)
- {
- return DoValidate(session);
- }
- protected abstract IValidationData DoValidate(Guid session = default);
- #endregion
- #region Query
- public CoreTable Query(object? filter = null, object? columns = null, object? sort = null)
- {
- return DoQuery((Filter<TEntity>?)filter, (Columns<TEntity>?)columns, (SortOrder<TEntity>?)sort);
- }
- public CoreTable Query(Filter<TEntity>? filter = null, Columns<TEntity>? columns = null, SortOrder<TEntity>? sort = null)
- {
- return DoQuery(filter, columns, sort);
- }
- public void Query(Filter<TEntity>? filter, Columns<TEntity>? columns, SortOrder<TEntity>? sort, Action<CoreTable?, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- CoreTable? result = null;
- try
- {
- result = DoQuery(filter, columns, sort);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(result, err);
- }
- });
- }
- protected abstract CoreTable DoQuery(Filter<TEntity>? filter, Columns<TEntity>? columns, SortOrder<TEntity>? sort = null);
- #endregion
- #region Load
- public Entity[] Load(object? filter = null, object? sort = null)
- {
- return DoLoad((Filter<TEntity>?)filter, (SortOrder<TEntity>?)sort);
- }
- public TEntity[] Load(Filter<TEntity>? filter = null, SortOrder<TEntity>? sort = null)
- {
- return DoLoad(filter, sort);
- }
- public void Load(Filter<TEntity>? filter, SortOrder<TEntity>? sort, Action<TEntity[]?, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- TEntity[]? result = null;
- try
- {
- result = DoLoad(filter, sort);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(result, err);
- }
- });
- }
- protected abstract TEntity[] DoLoad(Filter<TEntity>? filter = null, SortOrder<TEntity>? sort = null);
- #endregion
- #region Save
- public void Save(object entity, string auditnote)
- {
- var e = (TEntity)entity;
- DoSave(e, auditnote);
- }
- public void Save(IEnumerable<object> entities, string auditnote)
- {
- var items = entities.Select(x => (TEntity)x);
- DoSave(items, auditnote);
- }
- public void Save(TEntity entity, string auditnote)
- {
- DoSave(entity, auditnote);
- }
- public void Save(IEnumerable<TEntity> entities, string auditnote)
- {
- DoSave(entities, auditnote);
- }
- public void Save(TEntity entity, string auditnote, Action<TEntity, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- try
- {
- DoSave(entity, auditnote);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(entity, err);
- }
- });
- }
- public void Save(IEnumerable<TEntity> entities, string auditnote, Action<IEnumerable<TEntity>, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- var items = entities.AsArray();
- try
- {
- DoSave(items, auditnote);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(items, err);
- }
- });
- }
-
- protected abstract void DoSave(TEntity entity, string auditnote);
- protected abstract void DoSave(IEnumerable<TEntity> entities, string auditnote);
- #endregion
- #region Delete
- public void Delete(object entity, string auditnote)
- {
- DoDelete((TEntity)entity, auditnote);
- }
- public void Delete(IEnumerable<object> entities, string auditnote)
- {
- var items = entities.Select(x => (TEntity)x).ToList();
- DoDelete(items, auditnote);
- }
- public void Delete(TEntity entity, string auditnote)
- {
- DoDelete(entity, auditnote);
- }
- public void Delete(IEnumerable<TEntity> entities, string auditnote)
- {
- DoDelete(entities, auditnote);
- }
- public void Delete(TEntity entity, string auditnote, Action<TEntity, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- try
- {
- DoDelete(entity, auditnote);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(entity, err);
- }
- }
- );
- }
- public void Delete(IEnumerable<TEntity> entities, string auditnote, Action<IList<TEntity>, Exception?> callback)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- var items = entities.ToArray();
- try
- {
- DoDelete(items, auditnote);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(items, err);
- }
- });
- }
- protected abstract void DoDelete(TEntity entity, string auditnote);
- protected abstract void DoDelete(IEnumerable<TEntity> entities, string auditnote);
- #endregion
- #region MultipleTables
- public Dictionary<string, CoreTable> QueryMultiple(Dictionary<string, IQueryDef> queries)
- {
- if(queries.Count == 0)
- {
- return new Dictionary<string, CoreTable>();
- }
- else
- {
- return DoQueryMultiple(queries);
- }
- }
- protected abstract Dictionary<string, CoreTable> DoQueryMultiple(Dictionary<string, IQueryDef> queries);
- public void QueryMultiple(Action<Dictionary<string, CoreTable>?, Exception?> callback, Dictionary<string, IQueryDef> queries)
- {
- Task.Run(() =>
- {
- Exception? err = null;
- Dictionary<string, CoreTable>? result = null;
- try
- {
- result = QueryMultiple(queries);
- }
- catch (Exception e)
- {
- err = e;
- }
- finally
- {
- callback.Invoke(result, err);
- }
- });
- }
- #endregion
- #region 2FA
- public bool Check2FA(string code, Guid? session)
- {
- return DoCheck2FA(code, session);
- }
- protected abstract bool DoCheck2FA(string code, Guid? session);
- #endregion
- #region Ping
- public bool Ping()
- {
- return DoPing();
- }
- protected abstract bool DoPing();
- #endregion
-
- #region Info
-
- public abstract DatabaseInfo Info();
- #endregion
- #region Update
- public abstract string Version();
- public abstract string ReleaseNotes();
- public abstract byte[]? Installer();
- #endregion
- }
- }
|