public async Task <IActionResult> GetById(string id)
        {
            var entity = await suggestionApp.GetAsync(id);

            if (entity.IsNull())
            {
                return(NotFound());
            }

            var model = SuggestionModel.ToModel(entity);

            var urlHelper   = urlHelperFactory.GetUrlHelper(ControllerContext);
            var getByIdlink = GetSuggestionByIdLink(urlHelper, model.Id, true);
            var deleteLink  = DeleteSuggestionLink(urlHelper, model.Id);
            var updateLink  = UpdateSuggestionLink(urlHelper, model.Id);

            model.Links = new List <Link>
            {
                getByIdlink,
                updateLink,
                deleteLink
            };

            return(Ok(model));
        }
        public async Task <IActionResult> Create([FromBody] SuggestionModel suggestion)
        {
            suggestion.IsNull().Throw <InvalidParameterException>(string.Format(Messages.CannotBeNull, "suggestion"));

            var entity = await suggestionApp.SaveAsync(suggestion.ToDomain());

            var result = SuggestionModel.ToModel(entity);

            var urlHelper   = urlHelperFactory.GetUrlHelper(ControllerContext);
            var getByIdlink = GetSuggestionByIdLink(urlHelper, result.Id);
            var deleteLink  = DeleteSuggestionLink(urlHelper, result.Id);
            var updateLink  = UpdateSuggestionLink(urlHelper, result.Id);

            result.Links = new List <Link>
            {
                getByIdlink,
                updateLink,
                deleteLink
            };

            return(new CreatedResult(getByIdlink.Href, result));
        }
        public async Task <IActionResult> GetAll(int offset = 0, int limit = 100)
        {
            long totalCount = 0;
            var  totalPages = 0;
            var  routeName  = "GetAllSuggestions";

            var pagedList = await suggestionApp.GetAllAsync(offset, limit);

            if (pagedList.IsNotNull() && pagedList.Items.IsNotNull() && pagedList.Items.Count > 0)
            {
                totalCount = pagedList.Total;
                totalPages = (int)Math.Ceiling((double)totalCount / limit);
            }

            var urlHelper = urlHelperFactory.GetUrlHelper(ControllerContext);

            var prevLink = offset > 0 ? urlHelper.Link(routeName, new { offset = limit > offset ? 0 : offset - limit, limit = limit }) : string.Empty;
            var nextLink = offset < totalCount - limit ? urlHelper.Link(routeName, new { offset = offset + limit, limit = limit }) : string.Empty;

            var firstLink = offset > 0 ? urlHelper.Link(routeName, new { offset = 0, limit = limit }) : string.Empty;
            var lastLink  = offset < totalCount - limit ? urlHelper.Link(routeName, new { offset = totalCount - limit, limit = limit }) : string.Empty;

            var links = new List <Link>();

            if (prevLink.HasValue())
            {
                links.Add(new Link {
                    Href = prevLink, Method = Method.GET, Relation = "previous"
                });
            }

            if (nextLink.HasValue())
            {
                links.Add(new Link {
                    Href = nextLink, Method = Method.GET, Relation = "next"
                });
            }

            if (firstLink.HasValue())
            {
                links.Add(new Link {
                    Href = firstLink, Method = Method.GET, Relation = "first"
                });
            }

            if (lastLink.HasValue())
            {
                links.Add(new Link {
                    Href = lastLink, Method = Method.GET, Relation = "last"
                });
            }

            var result = new SuggestionsModel
            {
                TotalCount = pagedList.Total,
                TotalPages = totalPages,
                Links      = links,
                Items      = pagedList.Items.Select(e => SuggestionModel.ToModel(e)).ToArray()
            };

            return(Ok(result));
        }