Пример #1
0
 public BaseArticle(IClientArticle article)
 {
     this.Id        = article.Id;
     this.Url       = article.Url;
     this.Synopsis  = article.Synopsis;
     this.Published = article.Published;
     this.Created   = article.Created;
     this.Author    = article.Author;
     this.Article   = article.Article;
     this.Title     = article.Title;
     this.Updated   = article.Updated;
     this.Available = article.Available;
 }
Пример #2
0
 public CompleteArticle(IClientArticle article, Guid id)
 {
     Url       = article.Url;
     Title     = article.Title;
     Synopsis  = article.Synopsis;
     Author    = article.Author;
     Created   = article.Created;
     Published = article.Published;
     Article   = article.Article;
     Id        = id;
     Updated   = article.Updated;
     Available = article.Available;
 }
Пример #3
0
 public ClientArticle(IClientArticle article)
 {
     Url       = article.Url;
     Title     = article.Title;
     Synopsis  = article.Synopsis;
     Author    = article.Author;
     Created   = article.Created;
     Published = article.Published;
     Article   = article.Article;
     Updated   = article.Updated;
     Available = article.Available;
     Id        = article.Id;
 }
Пример #4
0
        private async Task <IClientArticle> InsertArticle(IClientArticle article, Guid Id)
        {
            // Turn the basic article into a Json blob
            var articleData = new ArticleFileData(article, Id);
            // Then store the info in table
            var articleDetails    = new ArticleDetails(article, Id);
            var articleBlobString = JsonConvert.SerializeObject(articleData);

            var articleDetailsTable = await articleDetailsStorage.Value;
            var articleBlobStore    = await articleBlobStorage.Value;
            await articleDetailsTable.Insert(articleDetails);

            await articleDetailsTable.Insert(new ArticleDetailsUrlId(articleDetails.Url, articleDetails.Id));

            await articleBlobStore.AddNewStringFile(articleBlobString, $"{Id}.json");

            return(new CompleteArticle(article, Id));
        }
Пример #5
0
 public async Task <IClientArticle> Create(IClientArticle article)
 {
     try
     {
         return(await this.InsertArticle(article, Guid.NewGuid()));
     }
     catch (AggregateException excep)
     {
         logger.LogCritical("Aggregate exception");
         foreach (var ex in excep.InnerExceptions)
         {
             logger.LogDebug(ex.Message + " " + ex.StackTrace);
         }
         throw;
     }
     catch (StorageException ex)
     {
         logger.LogDebug(ex.Message + " " + ex.StackTrace);
         throw;
     }
 }
Пример #6
0
        public async Task <IClientArticle> Update(IClientArticle article)
        {
            try
            {
                this.logger.LogTrace($"Updating article {article.Id}");
                // confirm we have not changed the url
                var articleTables = await this.articleDetailsStorage.Value;
                var articleKeys   = await articleTables.Get <ArticleDetailsUrlId>(article.Url, article.Id.ToString());

                // we have not changed the url
                if (articleKeys != null)
                {
                    this.logger.LogTrace($"Keys are the same {article.Id}");
                    await articleTables.Replace(new ArticleDetails(article) { ETag = "*" });

                    return(article);
                }
                else
                {
                    // we have changed the url (Which is part of the key)
                    // so we have to recreate the whole thing
                    this.logger.LogTrace($"Replaced keys recreating article{article.Id}");
                    await this.Delete(article.Id);

                    return(await this.InsertArticle(article, article.Id));
                }
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.Flatten().InnerExceptions)
                {
                    logger.LogError(ex.Message);
                }
                throw;
            }
        }
Пример #7
0
 public ArticleDetails(IClientArticle article, Guid Id) : this(article.Url, article.Title, article.Synopsis, article.Author, article.Created, article.Published, article.Available, article.Updated, Id)
 {
 }
Пример #8
0
 public ArticleFileData(IClientArticle article, Guid Id) : this(article.Title, article.Article, Id)
 {
 }
Пример #9
0
 public void Deconstruct(out IClientArticle clientArticle, out IArticleCategories tags, out IArticleCategories cats)
 {
     clientArticle = new BaseArticle(this);
     tags          = new ArticleTags(this);
     cats          = new ArticleCategories(this);
 }
Пример #10
0
 public CompleteClientArticle(IClientArticle article, IArticleCategories tags, IArticleCategories categories) : this(article.Url, article.Title, article.Synopsis, article.Article, article.Author, tags.Tags, categories.Tags, article.Created, article.Published, article.Updated, article.Available)
 {
     Id = article.Id;
 }
Пример #11
0
 public async Task Delete(IClientArticle article)
 {
     await this.Delete(article.Id);
 }
Пример #12
0
 public ClientArticle(IClientArticle article, DateTime?published) : this(article)
 {
     Published = published;
 }
Пример #13
0
 public static IClientArticle WithPublished(this IClientArticle @this, DateTime?published)
 {
     return(new ClientArticle(@this, published));
 }