public async Task <IActionResult> GetNodeList(DataRequestParams reqParams, [FromHeader(Name = "Accept")] string mediaType) { var domainNodes = await _nodeRepo.SelectAllNodesAsync(reqParams); if (mediaType == "application/unionall+json") { var providedNodes = Mapper.Map <IEnumerable <NodeWithLinksDto> >(domainNodes); // add the HATEOAS links for each node list DTO and a link for the entire wrapper. providedNodes = providedNodes.Select(node => { node = CreateLinksForNode(node); return(node); }); var wrapper = new LinkedCollectionWrapperDto <NodeWithLinksDto>(providedNodes); return(Ok(CreateLinksForNodeList(wrapper, reqParams))); } else { // add the pagination links Response.Headers.Add("LinkCurrent", CreateNavLink("GetNodeList", reqParams, UrlNavigationType.None)); Response.Headers.Add("LinkPrevious", CreateNavLink("GetNodeList", reqParams, UrlNavigationType.Previous)); Response.Headers.Add("LinkNext", CreateNavLink("GetNodeList", reqParams, UrlNavigationType.Next)); var providedNodes = Mapper.Map <IEnumerable <NodeDto> >(domainNodes); return(Ok(providedNodes)); } }
/// <summary> /// Create the HATEOAS links for the node collection being returned /// </summary> /// <param name="nodeList">the existing nodeList entry for which links are being constructed</param> /// <returns>the existing nodeList entry plus the allowable links</returns> private LinkedCollectionWrapperDto <NodeWithLinksDto> CreateLinksForNodeList( LinkedCollectionWrapperDto <NodeWithLinksDto> nodeWrapper, DataRequestParams reqParams) { nodeWrapper.Links.Add(new LinkDto( _urlHelper.Link("GetNodeList", new {}), "self", "GET" )); // next page nodeWrapper.Links.Add(new LinkDto( CreateNavLink("GetNodeList", reqParams, UrlNavigationType.Next), "next_page", "GET" )); // previous page nodeWrapper.Links.Add(new LinkDto( CreateNavLink("GetNodeList", reqParams, UrlNavigationType.Previous), "previous_page", "GET" )); // current page nodeWrapper.Links.Add(new LinkDto( CreateNavLink("GetNodeList", reqParams, UrlNavigationType.None), "current_page", "GET" )); return(nodeWrapper); }
private LinkedCollectionWrapperDto <BookDto> CreateLinksForBooks( LinkedCollectionWrapperDto <BookDto> booksWrapper) { // link to self booksWrapper.Links.Add( new LinkDto(_urlHelper.Link("GetBooksForAuthor", new { }), "self", "GET")); return(booksWrapper); }
public async Task <IActionResult> PostVectorSet(int nodeId, DataRequestParams reqParams, [FromBody] IEnumerable <Models.VectorCreateDto> requestVectorSet, [FromHeader(Name = "Accept")] string mediaType) { if (requestVectorSet == null) { return(BadRequest()); } var domainVectorSet = Mapper.Map <IEnumerable <Vector> >(requestVectorSet); domainVectorSet.Select(v => { v.NodeSubject = nodeId; return(v); }).ToList(); var savedVectorSet = await _vectorRepo.InsertVectorSetAsync(domainVectorSet); if (savedVectorSet == null) { throw new Exception("Failed to save VectorSet to DataStore."); } // create the list of seperated node IDs to construct the resource URI. var idList = string.Join(",", savedVectorSet.Select(a => a.VectorId)); _logger.LogInformation(LogEvents.ModifiedVector, "CREATED vector set {a}.", idList); if (mediaType == "application/unionall+json") { var providedVectoreSet = Mapper.Map <IEnumerable <VectorWithLinksDto> >(savedVectorSet); // add the HATEOAS links for each node list DTO and a link for the entire wrapper. providedVectoreSet = providedVectoreSet.Select(vector => { vector = CreateLinksForVector(vector); return(vector); }); var wrapper = new LinkedCollectionWrapperDto <VectorWithLinksDto>(providedVectoreSet); return(Ok(CreateLinksForNodeVectorList(wrapper, reqParams))); } else { var providedNodeSet = Mapper.Map <IEnumerable <VectorDto> >(savedVectorSet); return(CreatedAtRoute("GetVectorSetForNode", new { nodeId, ids = idList }, providedNodeSet)); } }
public async Task <IActionResult> CreateNodeSet(DataRequestParams reqParams, [FromBody] IEnumerable <NodeCreateDto> requestNodeSet, [FromHeader(Name = "Accept")] string mediaType) { if (requestNodeSet == null) { return(BadRequest()); } var domainNodeSet = Mapper.Map <IEnumerable <Node> >(requestNodeSet); var savedNodeSet = await _nodeRepo.InsertNodeSetAsync(domainNodeSet); if (savedNodeSet == null) { throw new Exception("Failed to save NodeSet to DataStore."); } // create the list of seperated node IDs to construct the resource URI. var idList = string.Join(",", savedNodeSet.Select(a => a.NodeId)); _logger.LogInformation(LogEvents.NewNodeSet, "CREATED Nodeset {a}.", idList); if (mediaType == "application/unionall+json") { var providedNodeSet = Mapper.Map <IEnumerable <NodeWithLinksDto> >(savedNodeSet); // add the HATEOAS links for each node list DTO and a link for the entire wrapper. providedNodeSet = providedNodeSet.Select(node => { node = CreateLinksForNode(node); return(node); }); var wrapper = new LinkedCollectionWrapperDto <NodeWithLinksDto>(providedNodeSet); return(Ok(CreateLinksForNodeList(wrapper, reqParams))); } else { var providedNodeSet = Mapper.Map <IEnumerable <NodeDto> >(savedNodeSet); return(CreatedAtRoute("GetNodeSet", new { ids = idList }, providedNodeSet)); } }
public IActionResult GetBooksForAuthor(Guid authorId) { if (!_libraryRepository.AuthorExists(authorId)) { return(NotFound()); } var booksForAuthorRepo = _libraryRepository.GetBooksForAuthor(authorId); var booksForAuthor = AutoMapper.Mapper.Map <IEnumerable <BookDto> >(booksForAuthorRepo); booksForAuthor = booksForAuthor.Select(book => { return(this.CreateLinksForBook(book)); }); var wrapper = new LinkedCollectionWrapperDto <BookDto>(booksForAuthor); return(Ok(this.CreateLinksForBooks(wrapper))); }
public IActionResult GetKeysByUser(Guid userId) { var userFound = _userApplication.Get(userId).Data; if (userFound == null) { return(NotFound()); } var keyInfoList = _userApplication.GetKeys(userId).Data; keyInfoList = keyInfoList.Select(key => { key = CreateLink(key); return(key); }); var wrapper = new LinkedCollectionWrapperDto <KeyInfoDto>(keyInfoList); return(Ok(CreateLink(wrapper))); }
public async Task <IActionResult> GetNodeSet(DataRequestParams reqParams, [ModelBinder(BinderType = typeof(StringListToIntArray))] IEnumerable <int> ids, [FromHeader(Name = "Accept")] string mediaType) { if (ids == null) { return(BadRequest()); } var domainNodeSet = await _nodeRepo.SelectNodeSetAsync(ids); // does the list of ids match the number of returned nodes? if (ids.Count() != domainNodeSet.Count()) { return(NotFound()); } if (mediaType == "application/unionall+json") { var providedNodeSet = Mapper.Map <IEnumerable <NodeWithLinksDto> >(domainNodeSet); // add the HATEOAS links for each node list DTO and a link for the entire wrapper. providedNodeSet = providedNodeSet.Select(node => { node = CreateLinksForNode(node); return(node); }); var wrapper = new LinkedCollectionWrapperDto <NodeWithLinksDto>(providedNodeSet); return(Ok(CreateLinksForNodeList(wrapper, reqParams))); } else { var providedNodeSet = Mapper.Map <IEnumerable <NodeDto> >(domainNodeSet); return(Ok(providedNodeSet)); } }
public async Task <IActionResult> GetVectorSetForNode(int nodeId, DataRequestParams reqParams, [ModelBinder(BinderType = typeof(StringListToIntArray))] IEnumerable <int> ids, [FromHeader(Name = "Accept")] string mediaType) { if (ids == null) { return(BadRequest()); } var vectorSet = await _vectorRepo.SelectVectorSetAsync(ids); if (vectorSet == null) { return(NotFound()); } if (mediaType == "application/unionall+json") { var providedVectors = Mapper.Map <IEnumerable <VectorWithLinksDto> >(vectorSet); // add the HATEOAS links for each vectorDTO providedVectors = providedVectors.Select(vector => { vector = CreateLinksForVector(vector); return(vector); }); var wrapper = new LinkedCollectionWrapperDto <VectorWithLinksDto>(providedVectors); return(Ok(CreateLinksForNodeVectorList(wrapper, reqParams))); } else { var providedVectors = Mapper.Map <IEnumerable <VectorDto> >(vectorSet); return(Ok(providedVectors)); } }
public IActionResult GetAll(PaginationParameters paginationParameters) { _logger.Info($"Event: {LoggingEvents.UserGetAll}, Method:{nameof(GetUser)}, Message: Get all users. Paging: {JsonConvert.SerializeObject(paginationParameters)}"); var userInfoListDto = _userApplication.GetAll(paginationParameters).Data; var previousPageLink = userInfoListDto.HasPrevious ? _paginationHelper.CreateUsersResourceUrl("GetAllUsers", paginationParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = userInfoListDto.HasNext ? _paginationHelper.CreateUsersResourceUrl("GetAllUsers", paginationParameters, ResourceUriType.NextPage) : null; Response.Headers.Add("X-Pagination", _paginationHelper.GetMetadata(userInfoListDto, previousPageLink, nextPageLink)); var newUserListAsQueryable = userInfoListDto.Select(user => { user = CreateLink(user); return(user); }).AsQueryable(); var wrapper = new LinkedCollectionWrapperDto <UserInfoDto>(newUserListAsQueryable); return(Ok(CreateLink(wrapper))); }
private LinkedCollectionWrapperDto <KeyInfoDto> CreateLink(LinkedCollectionWrapperDto <KeyInfoDto> keysWrapper) { _hypermediaBuilder.CreateCollectionLink(keysWrapper, "GetKeysByUser", "self", HypermediaVerbs.Get); return(keysWrapper); }
private LinkedCollectionWrapperDto <UserInfoDto> CreateLink(LinkedCollectionWrapperDto <UserInfoDto> usersWrapper) { _hypermediaBuilder.CreateCollectionLink(usersWrapper, "GetAllUsers", "self", HypermediaVerbs.Get); return(usersWrapper); }