Esempio n. 1
0
        public async Task <QueryResponse <string> > Query(UserQueryRequest query, CancellationToken cancellationToken = default)
        {
            var qr = Data.Users.AsQueryable();

            if (!string.IsNullOrWhiteSpace(query.Nickname))
            {
                qr = qr.Where(x => x.Nickname.Contains(query.Nickname));
            }

            Pagination pagination = new Pagination
            {
                TotalCount = await qr.CountAsync(cancellationToken),
            };

            if (query.Pagination != null)
            {
                qr = qr.Skip(query.Pagination.Offset).Take(query.Pagination.CountPerPage);
                pagination.PageNumber   = query.Pagination.PageNumber;
                pagination.CountPerPage = query.Pagination.CountPerPage;
            }
            else
            {
                pagination.PageNumber   = 0;
                pagination.CountPerPage = pagination.TotalCount;
            }

            return(new QueryResponse <string>(await qr.Select(x => x.Id).ToArrayAsync(cancellationToken), pagination));
        }
Esempio n. 2
0
        /// <summary>
        /// Count users of specified criteria.
        /// <remarks>The collection_id/collection_key parameter means that one can use either one of them - collection_id or collection_key.</remarks>
        /// </summary>
        /// <param name="request">User query request object.</param>
        /// <returns>Count of users with specified criteria.</returns>
        public Task <int> Count(UserQueryRequest request)
        {
            if (request.ProjectId == null)
            {
                throw new ArgumentNullException();
            }

            if (request.CollectionId != null && request.CollectionKey != null)
            {
                throw new ArgumentException();
            }

            var folders = request.Folders == null ? new List <string>() : new List <string>(request.Folders);

            if (folders.Count + (request.Folder != null ? 1 : 0) >
                MaxLimit)
            {
                throw new ArgumentException();
            }
            if (request.Folder != null)
            {
                folders.Add(request.Folder);
            }

            return(_syncanoClient.PostAsync <int>("user.count",
                                                  new
            {
                project_id = request.ProjectId,
                collection_id = request.CollectionId,
                collection_key = request.CollectionKey,
                state = request.State.ToString(),
                folders = folders.ToArray(),
                filter = request.Filter == null ? null : request.Filter.ToString()
            }, "count"));
        }
Esempio n. 3
0
        /// <summary>
        /// Gets users of specified criteria that are associated with Data Objects within specified collection.
        /// <remarks>The collection_id/collection_key parameter means that one can use either one of them - collection_id or collection_key.</remarks>
        /// </summary>
        /// <param name="request">User query request object.</param>
        /// <returns>List of User objects.</returns>
        public Task <List <User> > Get(UserQueryRequest request)
        {
            if (request.ProjectId == null)
            {
                throw new ArgumentNullException();
            }

            if (request.CollectionId == null && request.CollectionKey == null)
            {
                throw new ArgumentNullException();
            }

            var folders = request.Folders == null ? new List <string>() : new List <string>(request.Folders);

            if (folders.Count + (request.Folder != null ? 1 : 0) >
                DataObjectSyncanoClient.MaxVauluesPerRequest)
            {
                throw new ArgumentException();
            }
            if (request.Folder != null)
            {
                folders.Add(request.Folder);
            }

            return(_syncanoClient.PostAsync <List <User> >("user.get",
                                                           new
            {
                project_id = request.ProjectId,
                collection_id = request.CollectionId,
                collection_key = request.CollectionKey,
                state = request.State.ToString(),
                folders = folders.ToArray(),
                filter = request.Filter == null ? null : request.Filter.ToString()
            }, "user"));
        }
Esempio n. 4
0
        public async Task Get_WithTextContentFilter_GetsListOfUsers(UserSyncanoClient client)
        {
            //given
            var dataRequest = new DataObjectDefinitionRequest();

            dataRequest.ProjectId    = TestData.ProjectId;
            dataRequest.CollectionId = TestData.CollectionId;
            dataRequest.Text         = "sample text content";
            await _dataClient.New(dataRequest);

            var request = new UserQueryRequest();

            request.ProjectId    = TestData.ProjectId;
            request.CollectionId = TestData.CollectionId;
            request.Filter       = DataObjectContentFilter.Text;

            //when
            var result = await client.Get(request);

            //then
            result.ShouldNotBeNull();
            result.Count.ShouldEqual(1);

            //cleanup
            var deleteRequest = new DataObjectSimpleQueryRequest();

            deleteRequest.ProjectId    = TestData.ProjectId;
            deleteRequest.CollectionId = TestData.CollectionId;

            await _dataClient.Delete(deleteRequest);
        }
Esempio n. 5
0
        public async Task Count_WithSingleFolderName_GetsCountOfUsers(UserSyncanoClient client)
        {
            //given
            var dataRequest = new DataObjectDefinitionRequest();

            dataRequest.ProjectId    = TestData.ProjectId;
            dataRequest.CollectionId = TestData.CollectionId;
            dataRequest.Folder       = TestData.FolderName;
            await _dataClient.New(dataRequest);

            var request = new UserQueryRequest();

            request.ProjectId    = TestData.ProjectId;
            request.CollectionId = TestData.CollectionId;
            request.Folder       = TestData.FolderName;

            //when
            var result = await client.Count(request);

            //then
            result.ShouldEqual(1);

            //cleanup
            var deleteRequest = new DataObjectSimpleQueryRequest();

            deleteRequest.ProjectId    = TestData.ProjectId;
            deleteRequest.CollectionId = TestData.CollectionId;

            await _dataClient.Delete(deleteRequest);
        }
Esempio n. 6
0
        public async Task Get_WithPendingState_GetsListOfUsers(UserSyncanoClient client)
        {
            //given
            var dataRequest = new DataObjectDefinitionRequest();

            dataRequest.ProjectId    = TestData.ProjectId;
            dataRequest.CollectionId = TestData.CollectionId;
            dataRequest.State        = DataObjectState.Pending;
            await _dataClient.New(dataRequest);

            var request = new UserQueryRequest();

            request.ProjectId    = TestData.ProjectId;
            request.CollectionId = TestData.CollectionId;
            request.State        = DataObjectState.Pending;

            //when
            var result = await client.Get(request);

            //then
            result.ShouldNotBeNull();
            result.Count.ShouldEqual(1);

            //cleanup
            var deleteRequest = new DataObjectSimpleQueryRequest();

            deleteRequest.ProjectId    = TestData.ProjectId;
            deleteRequest.CollectionId = TestData.CollectionId;

            await _dataClient.Delete(deleteRequest);
        }
Esempio n. 7
0
        public async Task Count_WithImageContentFilter_GetsCountOfUsers(UserSyncanoClient client)
        {
            //given
            var dataRequest = new DataObjectDefinitionRequest();

            dataRequest.ProjectId    = TestData.ProjectId;
            dataRequest.CollectionId = TestData.CollectionId;
            dataRequest.ImageBase64  = TestData.ImageToBase64("smallSampleImage.png");
            await _dataClient.New(dataRequest);

            var request = new UserQueryRequest();

            request.ProjectId    = TestData.ProjectId;
            request.CollectionId = TestData.CollectionId;
            request.Filter       = DataObjectContentFilter.Image;

            //when
            var result = await client.Count(request);

            //then
            result.ShouldEqual(1);

            //cleanup
            var deleteRequest = new DataObjectSimpleQueryRequest();

            deleteRequest.ProjectId    = TestData.ProjectId;
            deleteRequest.CollectionId = TestData.CollectionId;

            await _dataClient.Delete(deleteRequest);
        }
        public async Task <IActionResult> GetUser([FromRoute] long?id, [FromQuery] string fields, [FromHeader(Name = "Accept")] string mediaType)
        {
            var request = new UserQueryRequest()
            {
                Id     = id,
                Fields = fields
            };
            var includeLinks = LinkerFactory.IncludeLinks(mediaType);
            //查询业务员
            var queryResponse = await _mediator.Send(request);

            if (queryResponse.Status != HttpStatusCode.OK)
            {
                return(Problem(queryResponse.Message, nameof(GetUser), (int)queryResponse.Status, "Request occur error"));
            }
            IEnumerable <RelativeLink> relativeLinks = new List <RelativeLink>();
            var shapedItemsWithLinks = queryResponse.ShapedData.FirstOrDefault() as IDictionary <string, object>;

            if (shapedItemsWithLinks == null)
            {
                return(Ok("empty result"));
            }
            if (includeLinks)
            {
                var linkerFactory = new LinkerFactory(Url);
                relativeLinks = linkerFactory.CreateLinksForItem(request.Id.Value, fields, GetCurrentControllerItemLinker());
                shapedItemsWithLinks.Add("links", relativeLinks);
            }
            return(Ok(shapedItemsWithLinks));
        }
Esempio n. 9
0
 public async Task <ActionResult <QueryResponse <string> > > Query([FromBody] UserQueryRequest query)
 {
     if (!await Provider.CanRead())
     {
         return(BadRequest());
     }
     return(Ok(await Provider.Query(query)));
 }
Esempio n. 10
0
        public virtual async Task <QueryResponse <string> > Query(UserQueryRequest query, CancellationToken cancellationToken = default)
        {
            query.Pagination ??= new Pagination();

            PagingPath?paging = null;

            paging ??= new PagingPath(Path.Join(RootPath, "pages"));

            await EnsurePagingConfig(paging, cancellationToken);

            paging.FillPagination(query.Pagination);

            var res = new QueryResponse <string>(await GetPagingResult(paging, query.Pagination, cancellationToken), query.Pagination);

            return(res);
        }
Esempio n. 11
0
        public async Task <ActionResult> List(UserQueryRequest request)
        {
            if (!Request.IsAjaxRequest())
            {
                return(View());
            }

            var manager = new UserManager();
            var paging  = await manager.GetUsersAsync(request.Start, request.Take, request.GetUseristQueryFilter());

            var users = paging.List.Select(u => new SaleUserViewModel(u));

            return(Json(true, string.Empty, new
            {
                paging.Total,
                List = users,
            }));
        }
Esempio n. 12
0
        public override async Task <IEnumerable <string> > All(CancellationToken cancellationToken = default)
        {
            List <string>    result = new List <string>();
            UserQueryRequest pq     = new UserQueryRequest();

            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();
                var req = await Query(pq, cancellationToken);

                result.AddRange(req.Results);
                if (!req.CurrentPage.HasNextPage)
                {
                    break;
                }
                pq.Pagination = req.CurrentPage.NextPage();
            }
            return(result);
        }
Esempio n. 13
0
        public async Task Get_WithNullCollectionIdAndCollectionKey_ThrowsException(UserSyncanoClient client)
        {
            //given
            var request = new UserQueryRequest();

            request.ProjectId = TestData.ProjectId;

            try
            {
                //when
                await client.Get(request);

                throw new Exception("Get should throw an exception.");
            }
            catch (Exception e)
            {
                //then
                e.ShouldBeType <ArgumentNullException>();
            }
        }
Esempio n. 14
0
        public async Task Get_WithInvalidCollectionId_ThrowsException(UserSyncanoClient client)
        {
            //given
            var request = new UserQueryRequest();

            request.ProjectId    = TestData.ProjectId;
            request.CollectionId = "abcde";

            try
            {
                //when
                await client.Get(request);

                throw new Exception("Get should throw an exception.");
            }
            catch (Exception e)
            {
                //then
                e.ShouldBeType <SyncanoException>();
            }
        }
Esempio n. 15
0
        public UserServiceResponse <HeadstoneUser> GetUsers(UserQueryRequest req, List <ServiceLogRecord> logRecords = null)
        {
            // Create the watch
            var sw = new Stopwatch();

            sw.Start();

            // Create a log record collection if necessary
            if (logRecords == null)
            {
                logRecords = new List <ServiceLogRecord>();
            }

            // Add log
            logRecords.Add(new ServiceLogRecord()
            {
                Type      = "DEBUG",
                TimeStamp = DateTime.Now,
                Body      = "User query request received."
            });

            // Create response
            var response = new UserServiceResponse <HeadstoneUser>();

            #region [ Validate request ]

            // Check required data
            List <string> dataErrors = new List <string>();

            if (dataErrors.Count > 0)
            {
                // Add log
                logRecords.Add(new ServiceLogRecord()
                {
                    Type      = "DEBUG",
                    TimeStamp = DateTime.Now,
                    Body      = dataErrors.Count + " error(s) found within the posted data! Terminating the process. Errors:" + String.Join(";", dataErrors)
                });

                // Stop the sw
                sw.Stop();

                response.Type = ServiceResponseTypes.Error;
                response.Code = ((short)TenantServiceResponseCodes.Invalid_Request).ToString();
                response.PreProcessingTook = sw.ElapsedMilliseconds;
                response.Message           = "There are some erros with the incoming request data!";
                response.Errors.AddRange(dataErrors);
                response.LogRecords = logRecords;

                return(response);
            }

            #endregion

            // Stop the timer
            sw.Stop();

            // Set the pre-processing time and start the time
            response.PreProcessingTook = sw.ElapsedMilliseconds;
            sw.Start();

            #region [ Envelope settings ]

            // Add log
            logRecords.Add(new ServiceLogRecord()
            {
                Type      = "DEBUG",
                TimeStamp = DateTime.Now,
                Body      = "Creating the envelope."
            });

            // Create the including fields according to the envelope
            var includes = new List <string>();
            if (!string.IsNullOrEmpty(req.Envelope))
            {
                if (req.Envelope == "full")
                {
                }
            }

            #endregion

            #region [ Filters ]

            // Add log
            logRecords.Add(new ServiceLogRecord()
            {
                Type      = "DEBUG",
                TimeStamp = DateTime.Now,
                Body      = "Creating filters."
            });
#if NET452
            // Check for filters
            Expression <Func <HeadstoneUser, bool> > filterPredicate = PredicateBuilder.New <HeadstoneUser>(true);

            // Add the filters
            if (req.UserIds.Any())
            {
                filterPredicate = filterPredicate.And(u => req.UserIds.Contains(u.Id));
            }

            if (req.Emails.Any())
            {
                filterPredicate = filterPredicate.And(u => req.Emails.Contains(u.Email));
            }
#endif
            #endregion

            #region [ Service call ]

            // Add log
            logRecords.Add(new ServiceLogRecord()
            {
                Type      = "DEBUG",
                TimeStamp = DateTime.Now,
                Body      = "Calling the base service."
            });

            // Create a default list
            var baseServiceResponse = new ServiceResponse <HeadstoneUser>();
#if NET452
            // Make the query
            if (filterPredicate.Parameters.Count > 0)
            {
                baseServiceResponse = userServiceBase.GetIncluding(filterPredicate, includes.ToArray());
            }
            else
            {
                baseServiceResponse = userServiceBase.GetAllIncluding(includes.ToArray());
            }
#endif

            if (baseServiceResponse.Type != ServiceResponseTypes.Success)
            {
                // Add log
                logRecords.Add(new ServiceLogRecord()
                {
                    Type      = "DEBUG",
                    TimeStamp = DateTime.Now,
                    Body      = "There was an error while querying the users!"
                });

                // Stop the sw
                sw.Stop();

                response.Type        = ServiceResponseTypes.Error;
                response.Code        = ((short)TenantServiceResponseCodes.General_Exception).ToString();
                response.ServiceTook = sw.ElapsedMilliseconds;
                response.Message     = "There was an error while querying the users!";
                response.Errors.Add("There was an error while querying the users!");
                response.LogRecords = logRecords;

                return(response);
            }

            // Set the result
            response.Result = baseServiceResponse.Result;

            // Add log
            logRecords.Add(new ServiceLogRecord()
            {
                Type      = "DEBUG",
                TimeStamp = DateTime.Now,
                Body      = "Users successfuly fetched."
            });

            // Stop the sw
            sw.Stop();

            response.Type        = ServiceResponseTypes.Success;
            response.Code        = ((short)TenantServiceResponseCodes.Request_Successfuly_Completed).ToString();
            response.ServiceTook = sw.ElapsedMilliseconds;
            response.Message     = "Users successfuly fetched";
            response.LogRecords  = logRecords;

            #endregion

            return(response);
        }
Esempio n. 16
0
        // Constructors

        internal QueryRequest(UserQueryRequest realRequest)
        {
            RealRequest = realRequest;
        }