예제 #1
0
        public async Task <object> Get(string templateName, string articleId)
        {
            var template = await GetTemplate(templateName);

            if (template == null || !Guid.TryParse(articleId, out var id))
            {
                return(NotFound());
            }

            var item = await _contentsService.All().Include(c => c.ContentCaches)
                       .FirstOrDefaultAsync(c => c.Id == id);

            if (item == null)
            {
                return(NotFound());
            }

            var cache = item.ContentCaches.FirstOrDefault(c => c.TemplateId == template.Id);

            if (cache != null)
            {
                return(Redirect($"/{cache.Content}"));
            }

            var cacheContent = $"{HtmlPrefix(item.Name)}\n{template.ArticlePrefix}\n{item.Data}\n{template.ArticleSurfix}\n{HtmlSurfix}\n";

            var cacheId = await _filesService.Add(_resourcesGroup, cacheContent, "html");

            cache = new ContentCache
            {
                ContentId  = item.Id,
                TemplateId = template.Id,
                Content    = cacheId,
                Updated    = DateTime.Now
            };

            item.ContentCaches ??= new List <ContentCache>();

            item.ContentCaches.Add(cache);

            await _contentsService.Update(item);

            return(Content(cacheContent, "text/html", Encoding.Default));
        }
예제 #2
0
        private async Task <FilesReply> UpdateFolderVersionsCache()
        {
            var folders = await GetFoldersInternal();

            var version = await _contentService.Add(_cachesGroup, fs =>
            {
                using (var s = new CodedOutputStream(fs))
                {
                    folders.WriteTo(s);
                }

                return(Task.FromResult(true));
            }, "bin");

            await _cache.SetStringAsync(FoldersVersionCacheKey, version);

            return(folders);
        }