Esempio n. 1
0
 public void ParseLinkResponseHeaderTest()
 {
     var queryResult = new QueryResult<CaseFile>();
     const string linkHeader = "Link=<https://app.penneo.com/api/v1/casefiles?page=17&per_page=10>; rel=\"next\",<https://app.penneo.com/api/v1/casefiles?page=1&per_page=10>; rel=\"first\",<https://app.penneo.com/api/v1/casefiles?page=15&per_page=10>; rel=\"prev\"";
     PaginationUtil.ParseRepsonseHeadersForPagination(linkHeader, queryResult);
     Assert.AreEqual(17, queryResult.NextPage);
     Assert.AreEqual(15, queryResult.PrevPage);
     Assert.AreEqual(1, queryResult.FirstPage);
 }
Esempio n. 2
0
        /// <summary>
        /// Find entities based on an input object.
        /// Returns output with data and metadata
        /// </summary>
        public QueryResult <T> FindBy <T>(QueryInput input)
            where T : Entity
        {
            _con.Log("FindBy (" + typeof(T).Name + ")", LogSeverity.Information);

            var criteria = input.Criteria;
            var orderBy  = input.OrderBy;
            var offset   = input.Offset;
            var limit    = input.Limit;

            UpdateCriteriaDateTimesToUnix(input);
            var query = criteria ?? new Dictionary <string, object>();

            if (limit.HasValue)
            {
                query["limit"] = limit;
            }
            if (offset.HasValue)
            {
                query["offset"] = offset;
            }

            if (orderBy != null)
            {
                var sort  = string.Join(",", orderBy.Keys);
                var order = string.Join(",", orderBy.Values);
                query["sort"]  = sort;
                query["order"] = order;
            }

            var output = new QueryResult <T>();

            output.Input = input;

            IEnumerable <T> objects;
            IRestResponse   response;

            output.Success      = _con.ApiConnector.FindBy(query, out objects, out response, input.Page, input.PerPage);
            output.Objects      = objects;
            output.StatusCode   = response.StatusCode;
            output.ErrorMessage = response.ErrorMessage;

            if (output.Success)
            {
                //Map objects
                var postProcessor = _con.Setup.GetPostProcessor(typeof(T));
                if (postProcessor != null)
                {
                    output.Objects = (IEnumerable <T>)postProcessor(output.Objects);
                }

                //Pagination
                output.Page    = input.Page;
                output.PerPage = input.PerPage;
                var linkHeader = response.Headers.FirstOrDefault(x => x.Name.Equals("link", StringComparison.OrdinalIgnoreCase));
                if (linkHeader != null && linkHeader.Value != null)
                {
                    PaginationUtil.ParseRepsonseHeadersForPagination(linkHeader.Value.ToString(), output);
                }


                //If no objects were returned, assume that there is no next page - regardless of any returned Link response header
                if (objects == null || !objects.Any())
                {
                    output.NextPage = null;
                }
            }
            return(output);
        }