using InABox.API; using InABox.Core; using InABox.Database; namespace InABox.Rpc; public class RpcQueryHandler : RpcCommandHandler { protected override RpcQueryResult Execute(IRpcSession session, RpcQueryParameters parameters, Logger logger) { var user = CredentialsCache.ValidateAndRefresh(session.ID) ?? throw new RpcException("User not found in Credentials Cache!", RpcError.UNAUTHENTICATED); var response = new RpcQueryResult(); var tasks = parameters.Queries.ToArray(query => Task.Run(() => { var table = new RpcQueryTable() { Key = query.Key }; var store = DbFactory.FindStore(query.Type, user.ID, user.UserID, session.Platform, session.Version ?? "", logger); table.Table = store.Query(query.Filter, query.Columns, query.Sort, query.Range); return table; })); Task.WaitAll(tasks); response.Tables = tasks.ToArray(x => x.Result); return response; } public RpcQueryHandler(IRpcServer sender) : base(sender) { } }