public static bool Includes(this ContentItem model, string token)
        {
            QueryExpression expression = new QueryExpression(token);

            return(expression.Evaluate(model.Properties));
        }
        public static bool TryBuild(this NewContentViewModel vm,
                                    TagResolver resolver,
                                    Domain domain,
                                    IEnumerable <MimeMapViewModel> mimes,
                                    ContentManager contentManager,
                                    out ContentItem item)
        {
            bool b = vm.Validate();

            item = new ContentItem();
            var contentType = vm.ContentType;

            if (b)
            {
                b            = !b;
                item.Id      = Guid.NewGuid().ToString().ToLower();
                item.Display = vm.Display;
                item.Scope   = vm.Scope;
                item.Properties.DefaultTags(domain);
                item.Properties.AddRange(resolver.Resolve(vm.Tags));
                if (vm.HasFile)
                {
                    FileInfo info = new FileInfo(vm.Filepath);
                    if (contentManager.TryInload(info, out string filename))
                    {
                        item.Mime = mimes.Resolve(info);
                        item.Body = filename;
                        item.Properties.Add(new Property()
                        {
                            Name  = $"{AppConstants.Tags.Prefix}-{AppConstants.Tags.Extension}",
                            Value = item.Mime
                        });
                        var filetype = item.Mime.Trim(new char[] { '.' });
                        vm.Paths.Add($"/files/{filetype}");
                        b = true;
                    }
                }
                else
                {
                    item.Mime = vm.Mime;
                    if (vm.IsLink)
                    {
                        if (!vm.Body.StartsWithAny(new string[] { "http://", "https://" }))
                        {
                            item.Body = $"http://{vm.Body}";
                        }
                        else
                        {
                            item.Body = vm.Body;
                        }
                    }
                    else if (vm.Body.Length > contentManager.MaxLength &&
                             contentManager.TryInloadAsFile(vm.Body, item.Id, out string filename, out FileInfo info))
                    {
                        item.Mime = mimes.Resolve(info);
                        item.Body = filename;
                        item.Properties.Add(new Property()
                        {
                            Name  = $"{AppConstants.Tags.Prefix}-{AppConstants.Tags.Extension}",
                            Value = item.Mime
                        });
                        b = true;
                    }
                    else
                    {
                        item.Body = vm.Body;
                    }

                    b = true;
                }
        public static string Domain(this ContentItem item)
        {
            var found = item.Properties.FirstOrDefault(y => y.Name.Equals("x-domain"));

            return(found?.Value.ToString() ?? AppConstants.Default);
        }