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; }
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; }
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; }
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)); }
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; } }
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; } }
public ArticleDetails(IClientArticle article, Guid Id) : this(article.Url, article.Title, article.Synopsis, article.Author, article.Created, article.Published, article.Available, article.Updated, Id) { }
public ArticleFileData(IClientArticle article, Guid Id) : this(article.Title, article.Article, Id) { }
public void Deconstruct(out IClientArticle clientArticle, out IArticleCategories tags, out IArticleCategories cats) { clientArticle = new BaseArticle(this); tags = new ArticleTags(this); cats = new ArticleCategories(this); }
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; }
public async Task Delete(IClientArticle article) { await this.Delete(article.Id); }
public ClientArticle(IClientArticle article, DateTime?published) : this(article) { Published = published; }
public static IClientArticle WithPublished(this IClientArticle @this, DateTime?published) { return(new ClientArticle(@this, published)); }