public void GetAllTest()
        {
            var tagQueryArgs = new TagQueryArgs();

            MyMvc
            .Controller <TagsController>()
            .Calling(c => c.GetAll(tagQueryArgs))
            .ShouldReturn()
            .Ok();
        }
        public IActionResult GetAll([FromQuery] TagQueryArgs args)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (args.Status == ContentStatus.Deleted && !UserPermissions.IsAllowedToGetDeleted(User.Identity))
            {
                return(Forbid());
            }

            var query = _db.Database.GetCollection <Tag>(ResourceType.Tag.Name).AsQueryable();

            try
            {
                var tags = query
                           .FilterByIds(args.Exclude, args.IncludeOnly)
                           .FilterByUser(args.Status, User.Identity)
                           .FilterByStatus(args.Status, User.Identity)
                           .FilterByTimestamp(args.Timestamp)
                           .FilterByUsage(args.Used)
                           .FilterIf(!string.IsNullOrEmpty(args.Query), x =>
                                     x.Title.ToLower().Contains(args.Query.ToLower()) ||
                                     x.Description.ToLower().Contains(args.Query.ToLower()))
                           .Sort(args.OrderBy,
                                 ("id", x => x.Id),
                                 ("title", x => x.Title),
                                 ("timestamp", x => x.Timestamp))
                           .PaginateAndSelect(args.Page, args.PageSize, x => new TagResult(x)
                {
                    Timestamp = _referencesIndex.LastModificationCascading(ResourceType.Tag, x.Id)
                });


                return(Ok(tags));
            }
            catch (InvalidSortKeyException e)
            {
                ModelState.AddModelError(nameof(args.OrderBy), e.Message);
                return(BadRequest(ModelState));
            }
        }