Пример #1
0
        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();
            }
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
 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);
 }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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;
        }
Пример #6
0
        private void FillTags(NewsItem item)
        {
            var tags = _tagGateway.SelectByNews(item.HeartId).Select(x => x.Name);

            item.Tags = string.Join(",", tags);
        }