示例#1
0
        public IActionResult GetAuthor(Guid id, [FromQuery] string fields)
        {
            Contract.Ensures(Contract.Result <IActionResult>() != null);
            AuthorDto author = null;

            if (!_typeHelperService.TypeHasProperties <AuthorDto>(fields))
            {
                return(BadRequest());
            }

            if (!_libraryRepository.AuthorExists(id))
            {
                return(NotFound());
            }

            TryCatchHelper.Execute(() =>
            {
                var authorFromRepo = _libraryRepository.GetAuthor(id);
                author             = authorFromRepo.Map <AuthorDto>();
            }).IfNotNull(ex =>
            {
                return(StatusCode(500, "An Unhandled fault Happend. Try again later"));
            });



            if (author.IsNotNull())
            {
                var links = CreateLinksForAuthor(id, fields);

                var linkedResourceToReturn = author.ShapeData(fields) as IDictionary <string, object>;

                linkedResourceToReturn.Add("links", links);

                return(Ok(linkedResourceToReturn));
            }
            return(NotFound());
        }