Query.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. using InABox.API;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace InABox.Rpc;
  5. public class RpcQueryHandler : RpcCommandHandler<IRpcServer, RpcQueryCommand, RpcQueryParameters, RpcQueryResult>
  6. {
  7. protected override RpcQueryResult Execute(IRpcSession session, RpcQueryParameters parameters, Logger logger)
  8. {
  9. var user = CredentialsCache.ValidateAndRefresh(session.ID)
  10. ?? throw new RpcException("User not found in Credentials Cache!", RpcError.UNAUTHENTICATED);
  11. var response = new RpcQueryResult();
  12. var tasks = parameters.Queries.ToArray(query => Task.Run(() =>
  13. {
  14. var table = new RpcQueryTable() { Key = query.Key };
  15. var store = DbFactory.FindStore(query.Type, user.ID, user.UserID, session.Platform, session.Version ?? "", logger);
  16. table.Table = store.Query(query.Filter, query.Columns, query.Sort, query.Range);
  17. return table;
  18. }));
  19. Task.WaitAll(tasks);
  20. response.Tables = tasks.ToArray(x => x.Result);
  21. return response;
  22. }
  23. public RpcQueryHandler(IRpcServer sender) : base(sender)
  24. {
  25. }
  26. }