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);
 }
Exemple #3
0
        private LinkedCollectionWrapperDto <BookDto> CreateLinksForBooks(
            LinkedCollectionWrapperDto <BookDto> booksWrapper)
        {
            // link to self
            booksWrapper.Links.Add(
                new LinkDto(_urlHelper.Link("GetBooksForAuthor", new { }),
                            "self",
                            "GET"));

            return(booksWrapper);
        }
Exemple #4
0
        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));
            }
        }
Exemple #6
0
        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)));
        }
Exemple #7
0
        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));
            }
        }
Exemple #9
0
        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));
            }
        }
Exemple #10
0
        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)));
        }
Exemple #11
0
        private LinkedCollectionWrapperDto <KeyInfoDto> CreateLink(LinkedCollectionWrapperDto <KeyInfoDto> keysWrapper)
        {
            _hypermediaBuilder.CreateCollectionLink(keysWrapper, "GetKeysByUser", "self", HypermediaVerbs.Get);

            return(keysWrapper);
        }
Exemple #12
0
        private LinkedCollectionWrapperDto <UserInfoDto> CreateLink(LinkedCollectionWrapperDto <UserInfoDto> usersWrapper)
        {
            _hypermediaBuilder.CreateCollectionLink(usersWrapper, "GetAllUsers", "self", HypermediaVerbs.Get);

            return(usersWrapper);
        }