public void UpdateNewsItem(NewsItem news) { var originHeart = _heartService.GetHeart(news.HeartId); if (news.RelativeUrl != originHeart.RelativeUrl) { bool relativeUrlExists = _heartService.CheckIfUrlExists(news.RelativeUrl); if (relativeUrlExists) { throw new ArgumentException("Этот адрес уже занят"); } } var dataRec = Mapper.Map <Data.Models.NewsItem>(news); var tags = !string.IsNullOrEmpty(news.Tags) ? news.Tags.Split(',').Select(x => x.Trim().ToLower()).ToList() : new List <string>(); var originalTags = _tagGateway.SelectByNews(news.HeartId); var existingTags = _tagGateway.Select(); var existingTagNames = existingTags.Select(x => x.Name).ToArray(); var existingCatIds = _newsItemCategoryGateway.SelectCategoryIdsByNews(news.HeartId); var catIds = news.Categories.Select(x => x.ID).ToArray(); using (var ts = new TransactionScope()) { _heartService.UpdateHeart(news); _newsItemGateway.Update(dataRec); foreach (var tag in tags.Except(existingTagNames)) { int tagId = _tagGateway.Insert(tag); _newsItemTagGateway.Insert(news.HeartId, tagId); } foreach (var tag in existingTags.Where(x => tags.Contains(x.Name) && originalTags.All(y => y.TagId != x.TagId))) { _newsItemTagGateway.Insert(news.HeartId, tag.TagId); } if (originalTags.Any(x => !tags.Contains(x.Name))) { foreach (var tag in originalTags.Where(x => !tags.Contains(x.Name))) { _newsItemTagGateway.Delete(news.HeartId, tag.TagId); } _tagGateway.DeleteUnassociated(); } foreach (var catId in catIds.Except(existingCatIds)) { _newsItemCategoryGateway.Insert(news.HeartId, catId); } foreach (var catId in existingCatIds.Except(catIds)) { _newsItemCategoryGateway.Delete(news.HeartId, catId); } _searchService.UpdateIndex(news); ts.Complete(); } }
private void FillItem(NewsItem item) { // tags FillTags(item); // cats var catsIds = _newsItemCategoryGateway.SelectCategoryIdsByNews(item.HeartId); var cats = catsIds.Select(x => _categoryGateway.SelectOne(x)); foreach (var category in cats) { item.Categories.Add(new IdNamePair <int>(category.CategoryId, category.Name)); } }
public void UpdateClientPost(NewsItem post) { throw new NotImplementedException(); //if (string.IsNullOrEmpty(post.Title) // || string.IsNullOrEmpty(post.Text) // || string.IsNullOrEmpty(post.Description)) //{ // throw new ArgumentException(); //} //post.Text = FormattingHelper.AddRelNofollowToAnchors(post.Text); //post.RelativeUrl = TranslitHelper.ToTranslitedUrl(post.Title); //var dataRec = Mapper.Map<Data.Models.NewsItem>(post); //_newsItemGateway.Update(dataRec); //_searchService.UpdateIndex(post); }
public int CreateNewsItem(NewsItem news) { news.Type = news.GetType().FullName; var dataRec = Mapper.Map <Data.Models.NewsItem>(news); lock (_createNewsItemLockObj) { using (var ts = new TransactionScope()) { news.RelativeUrl = _heartService.GetNextAvailableRelativeUrl(news.RelativeUrl); news.HeartId = dataRec.HeartId = _heartService.CreateHeart(news); _newsItemGateway.Insert(dataRec); var tags = news.Tags?.Split(',').Select(x => x.Trim().ToLower()).ToArray() ?? new string[0]; var existingTags = _tagGateway.Select(); var existingTagNames = existingTags.Select(x => x.Name).ToArray(); foreach (var tag in tags.Except(existingTagNames)) { int tagId = _tagGateway.Insert(tag); _newsItemTagGateway.Insert(news.HeartId, tagId); } foreach (var tag in existingTags.Where(x => tags.Contains(x.Name))) { _newsItemTagGateway.Insert(news.HeartId, tag.TagId); } var catIds = news.Categories.Select(x => x.ID); foreach (var catId in catIds) { _newsItemCategoryGateway.Insert(news.HeartId, catId); } _searchService.UpdateIndex(news); ts.Complete(); return(news.HeartId); } } }
public int CreateClientPost(NewsItem post) { throw new NotImplementedException(); //if(string.IsNullOrEmpty(post.Title) // || string.IsNullOrEmpty(post.Text) // || string.IsNullOrEmpty(post.Description)) //{ // throw new ArgumentException(); //} //if (!_blogService.CheckIfUserHasAccess(post.AuthorId, post.BlogId)) //{ // throw new UnauthorizedAccessException(); //} //post.CreationDate = post.PostingDate = DateTime.UtcNow; //post.Text = FormattingHelper.AddRelNofollowToAnchors(post.Text); //post.RecordType = RecordType.Default; //post.RelativeUrl = TranslitHelper.ToTranslitedUrl(post.Title); //var dataRec = Mapper.Map<Data.Models.NewsItem>(post); //int id = _newsItemGateway.Insert(dataRec); //post.HeartId = id; //_searchService.UpdateIndex(post); //return id; }
private void FillTags(NewsItem item) { var tags = _tagGateway.SelectByNews(item.HeartId).Select(x => x.Name); item.Tags = string.Join(",", tags); }