示例#1
0
        public static Model.ToDoTaskInfoSearchQuery Convert(Client.ToDoTaskInfoSearchQuery clientQuery)
        {
            if (clientQuery == null)
            {
                throw new ArgumentNullException(nameof(clientQuery));
            }

            var modelSort = clientQuery.Sort.HasValue ?
                            SortTypeConverter.Convert(clientQuery.Sort.Value) :
                            (Models.SortType?)null;

            var modelSortBy = clientQuery.SortBy.HasValue ?
                              ToDoTaskSortByConverter.Convert(clientQuery.SortBy.Value) :
                              (Model.ToDoTaskSortBy?)null;

            var priority = clientQuery.Priority.HasValue ?
                           ToDoTaskPriorityConverter.Convert(clientQuery.Priority.Value)
                : (Model.ToDoTaskPriority?)null;

            return(new Model.ToDoTaskInfoSearchQuery
            {
                CreatedFrom = clientQuery.CreatedFrom,
                CreatedTo = clientQuery.CreatedTo,

                Limit = clientQuery.Limit,
                Offset = clientQuery.Offset,

                Priority = priority,
                EndAt = clientQuery.EndAt,

                Sort = modelSort,
                SortBy = modelSortBy
            });
        }
        private async Task BindFromUri(ModelMetadataProvider metadataProvider, HttpActionContext actionContext,
                                       CancellationToken cancellationToken)
        {
            var uriBinding = _descriptor.BindWithAttribute(new FromUriAttribute());
            await uriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);

            var bindedValue = GetValue(actionContext) as IClientQuery;
            var query       = GetValue(actionContext) as IClientQuery ??
                              Activator.CreateInstance(_descriptor.ParameterType) as IClientQuery;

            if (bindedValue == null)
            {
                SetValue(actionContext, query);
            }
            var clientFilterable = query as IClientFilterable;
            var clientSortable   = query as IClientSortable;
            var clientPageable   = query as IClientPageable;
            var queryString      = actionContext.Request.GetQueryNameValuePairs()
                                   .Where(x => Keys.KnownKeys.Contains(x.Key))
                                   .ToDictionary(x => x.Key, x => (object)x.Value);
            var routeDataValues = actionContext.Request.GetRouteData()
                                  .Values
                                  .Where(x => Keys.KnownKeys.Contains(x.Key));
            var requestValues = queryString.Union(routeDataValues).ToDictionary(x => x.Key, x => x.Value);

            if (queryString.ContainsKey(Keys.Filter) && clientFilterable != null)
            {
                var converter = new QueryStringFilterConverter();
                var filter    = (IFilter)converter.ConvertFrom(queryString[Keys.Filter]);
                clientFilterable.ClientFilter = filter ?? new AlwaysTrueFilter();
            }
            if (queryString.ContainsKey(Keys.Sort) && clientSortable != null)
            {
                var converter = new SortTypeConverter();
                var sort      = (ISort)converter.ConvertFrom(queryString[Keys.Sort]);
                clientSortable.ClientSort = sort ?? clientSortable.ClientSort ?? new RandomSort();
            }
            if ((queryString.ContainsKey(Keys.PageNumber) || queryString.ContainsKey(Keys.PageSize)) && clientPageable != null)
            {
                int pageNumber = 1, pageSize = 10;
                var hasNumber = requestValues.ContainsKey(Keys.PageNumber) && int.TryParse(requestValues[Keys.PageNumber].ToString(), out pageNumber);
                var hasSize   = requestValues.ContainsKey(Keys.PageSize) && int.TryParse(requestValues[Keys.PageSize].ToString(), out pageSize);
                var page      = new ClientPage
                {
                    PageNumber = hasNumber ? (int?)pageNumber : null,
                    PageSize   = hasSize ? (int?)pageSize : null
                };
                clientPageable.ClientPage = page;
            }
        }
示例#3
0
        public void Can_Deserialize_And_Execute_Sort_From_Query_String()
        {
            const string text      = "year DESC, make ASC";
            var          converter = new SortTypeConverter();
            var          sort      = (ISort)converter.ConvertFrom(text);

            Assert.IsNotNull(sort);
            Assert.IsInstanceOfType(sort, typeof(DynamicLinqSort));

            var expected = Cars.OrderByDescending(x => x.Year).ThenBy(x => x.Make).ToList();
            var actual   = sort.ToDelegate <Car>()(Cars.AsQueryable()).ToList();

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
示例#4
0
        /// <summary>
        /// Переводит запрос за заметками из клиентсокой модели в серверную
        /// </summary>
        /// <param name="clientQuery">Запрос за заметками в клиентской модели</param>
        /// <returns>Запрос за заметками в серверной модели</returns>
        public static Model.NoteInfoSearchQuery Convert(Client.NoteInfoSearchQuery clientQuery)
        {
            if (clientQuery == null)
            {
                throw new ArgumentNullException(nameof(clientQuery));
            }

            var modelUserId = (Guid?)null;

            if (clientQuery.UserId != null)
            {
                if (!Guid.TryParse(clientQuery.UserId, out var userId))
                {
                    throw new ArgumentException($"The user id \"{clientQuery.UserId}\" is invalid.", nameof(clientQuery));
                }

                modelUserId = userId;
            }


            var modelSort = clientQuery.Sort.HasValue ?
                            SortTypeConverter.Convert(clientQuery.Sort.Value) :
                            (Models.SortType?)null;

            var modelSortBy = clientQuery.SortBy.HasValue ?
                              NoteSortByConverter.Convert(clientQuery.SortBy.Value) :
                              (Model.NoteSortBy?)null;

            var modelQuery = new Model.NoteInfoSearchQuery
            {
                CreatedFrom = clientQuery.CreatedFrom,
                CreatedTo   = clientQuery.CreatedTo,
                UserId      = modelUserId,
                Favorite    = clientQuery.Favorite,
                Limit       = clientQuery.Limit,
                Offset      = clientQuery.Offset,
                Sort        = modelSort,
                SortBy      = modelSortBy,
                Tags        = clientQuery.Tags?.ToList()
            };

            return(modelQuery);
        }