Example #1
0
 /// <summary>
 /// Retrieve a list of items based on the filters (if any) applied.
 /// </summary>
 /// <typeparam name="T">The type of the items to retrieve.</typeparam>
 /// <param name="request">describes the selection action</param>
 /// <returns>This table reference.</returns>
 public UnityTask <StorageResponse <IEnumerable <ItemSnapshot> > > GetItems(ItemQueryRequest <T> request)
 {
     return(_repository.Query(request).ConvertTo(task =>
     {
         return task.IsFaulted
             ? new StorageResponse <IEnumerable <ItemSnapshot> >(task.Result.error)
             : new StorageResponse <IEnumerable <ItemSnapshot> >(task.Result.data.items.Select(o => new ItemSnapshot(o, _storage, TableMeta)));
     }));
 }
Example #2
0
 public Task <ItemQueryResponse> ItemQueryAsync(
     ItemQueryRequest request,
     bool isEdiscoveryUser,
     CancellationToken cancellationToken = default(CancellationToken)
     ) => Service.ItemQueryAsync(
     request.PathIdentifier,
     isEdiscoveryUser,
     request.PageIndex,
     request.PageSize,
     request.SortField,
     request.SortAscending,
     cancellationToken: cancellationToken
     );
Example #3
0
        /// <summary>
        /// Returns an query ordered by the secondary key
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        public UnityTask <StorageResponse <ItemList <T> > > Query <T>(ItemQueryRequest <T> query) where T : class
        {
            var metadata = GetMetadata <T>();

            var request = new StorageRequest
            {
                applicationKey      = ApplicationKey,
                privateKey          = PrivateKey,
                authenticationToken = AuthenticationToken,
                table      = metadata.Table,
                key        = query._datakey,
                properties = query._properties,
                startKey   = query._startKey,
                limit      = query._limit,
                filter     = query._filter
            };


            var dto = JsonMapper.ToJson(request);

            return(Post <ItemList <T> >("queryItems", dto));
        }
Example #4
0
        IEnumerator TestQueryAsync()
        {
            Terminal.LogImportant("TestQueryAsync");

            // populate
            Terminal.Log("populate");
            var items = new List <Leaderboard>();

            for (int i = 0; i < 10; i++)
            {
                var score = new Leaderboard
                {
                    Points   = Strings.RandomNumber(100, 10000),
                    UserName = Strings.RandomString(10),
                    BoardId  = "HighScores",
                    Rank     = i,
                };
                var result = Repository.Create(score);
                yield return(StartCoroutine(result.WaitRoutine()));

                result.ThrowIfFaulted();
                if (result.Result.hasError)
                {
                    throw new Exception(result.Result.error.message);
                }
                items.Add(result.Result.data);
            }

            // QUERY
            Terminal.Log("QUERY");
            var query1 = new ItemQueryRequest <Leaderboard>("HighScores")
                         .Asc()
                         .WithProperties(new[] { "Points", "Username", "Rank" })
                         .GreaterEqual(2)
                         .Limit(5);

            var result1 = Repository.Query(query1);

            yield return(StartCoroutine(result1.WaitRoutine()));

            result1.ThrowIfFaulted();
            if (result1.Result.hasError)
            {
                throw new Exception(result1.Result.error.message);
            }

            // test filter
            Assert.IsTrue(result1.Result.data.items.First().Rank >= 2, "request has invalid data");

            //QUERY 2
            Terminal.Log("QUERY 2");
            var query2 = new ItemQueryRequest <Leaderboard>("HighScores")
                         .Asc()
                         .WithProperties(new[] { "Points", "Username", "Rank" })
                         .Between(2, 999)
                         .Limit(5)
                         .WithStartKey(result1.Result.data.stopKey);
            var result2 = Repository.Query(query2);

            yield return(StartCoroutine(result2.WaitRoutine()));

            result2.ThrowIfFaulted();
            if (result2.Result.hasError)
            {
                throw new Exception(result2.Result.error.message);
            }

            //test filter
            Assert.IsTrue(result2.Result.data.items.First().Rank >= result1.Result.data.items.Last().Rank, "request has invalid data");

            //cleanup
            Terminal.Log("cleanup");
            foreach (var item in items)
            {
                var resultd = Repository.Delete(item);
                yield return(StartCoroutine(resultd.WaitRoutine()));

                resultd.ThrowIfFaulted();
                if (resultd.Result.hasError)
                {
                    throw new Exception(resultd.Result.error.message);
                }
            }

            Terminal.LogSuccess("Test Success");
        }
Example #5
0
        IEnumerator TestQueryAsync()
        {
            Terminal.LogImportant("TestQueryAsync");

            // populate
            Terminal.Log("populate");
            var items = new List<Leaderboard>();
            for (int i = 0;i < 10;i++)
            {
                var score = new Leaderboard
                {
                    Points = Strings.RandomNumber(100, 10000),
                    UserName = Strings.RandomString(10),
                    BoardId = "HighScores",
                    Rank = i,
                };
                var result = Repository.Create(score);
                yield return StartCoroutine(result.WaitRoutine());
                result.ThrowIfFaulted();
                if (result.Result.hasError)
                    throw new Exception(result.Result.error.message);
                items.Add(result.Result.data);
            }

            // QUERY
            Terminal.Log("QUERY");
            var query1 = new ItemQueryRequest<Leaderboard>("HighScores")
                .Asc()
                .WithProperties(new[] { "Points", "Username", "Rank" })
                .GreaterEqual(2)
                .Limit(5);

            var result1 = Repository.Query(query1);
            yield return StartCoroutine(result1.WaitRoutine());
            result1.ThrowIfFaulted();
            if (result1.Result.hasError)
                throw new Exception(result1.Result.error.message);

            // test filter
            Assert.IsTrue(result1.Result.data.items.First().Rank >= 2, "request has invalid data");

            //QUERY 2
            Terminal.Log("QUERY 2");
            var query2 = new ItemQueryRequest<Leaderboard>("HighScores")
                .Asc()
                .WithProperties(new[] { "Points", "Username", "Rank" })
                .Between(2, 999)
                .Limit(5)
                .WithStartKey(result1.Result.data.stopKey);
            var result2 = Repository.Query(query2);
            yield return StartCoroutine(result2.WaitRoutine());
            result2.ThrowIfFaulted();
            if (result2.Result.hasError)
                throw new Exception(result2.Result.error.message);

            //test filter
            Assert.IsTrue(result2.Result.data.items.First().Rank >= result1.Result.data.items.Last().Rank, "request has invalid data");

            //cleanup
            Terminal.Log("cleanup");
            foreach (var item in items)
            {
                var resultd = Repository.Delete(item);
                yield return StartCoroutine(resultd.WaitRoutine());
                resultd.ThrowIfFaulted();
                if (resultd.Result.hasError)
                    throw new Exception(resultd.Result.error.message);
            }

            Terminal.LogSuccess("Test Success");
        }