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)); }
/// <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")); }
/// <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")); }
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); }
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); }
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); }
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)); }
public async Task <ActionResult <QueryResponse <string> > > Query([FromBody] UserQueryRequest query) { if (!await Provider.CanRead()) { return(BadRequest()); } return(Ok(await Provider.Query(query))); }
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); }
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, })); }
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); }
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>(); } }
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>(); } }
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); }
// Constructors internal QueryRequest(UserQueryRequest realRequest) { RealRequest = realRequest; }