Beispiel #1
0
        public new async Task <ResultMessage <ArticleViewModel> > Insert(ArticleViewModel article)//Method Hidding
        {
            //TODO: Normalde DTO dan gelmesi gerekiyor verinin...(Dto Refactoring yapılması gerek.)
            ResultMessage <ArticleViewModel> resultMessage = new ResultMessage <ArticleViewModel>();
            var durum = await Get(p => p.Slug == article.Slug);

            if (durum == null)
            {
                article.CreatedAt = DateTime.Now;
                article.UpdatedAt = DateTime.Now;
                var articleDoa      = _mapper.Map <Article>(article);
                var insertedTags    = _tagServices.GetQueryable(p => article.Tags.Contains(p.TagId)).Select(p => p.TagId).ToList(); // Eklenmiş taglar olunca direk hataya düşüyor. Ondan eklenmiş tagları buluyoruz. Onları ArticleFavorites tablosuna ekleticez.
                var notInsertedTags = article.Tags.Where(p => !insertedTags.Contains(p)).ToList();
                if (notInsertedTags.Count > 0)
                {
                    foreach (var item in notInsertedTags)
                    {
                        articleDoa.ArticleTags.Add(new ArticleTag {
                            Tag = new Tag {
                                TagId = item
                            }, Article = articleDoa
                        });
                    }
                }

                var sonuc = await base.Insert(articleDoa);

                if (sonuc > 0)
                {
                    List <ArticleTag> articleTags = new List <ArticleTag>();
                    insertedTags.ForEach(p => { articleTags.Add(new ArticleTag {
                            TagId = p, ArticleId = articleDoa.Id
                        }); });
                    await _articleTagsServices.InsertAll(articleTags);

                    resultMessage.Result = article;
                }
                else
                {
                    resultMessage.Errors = new ErrorMessageObj(ErrorMessageCode.ArticleCouldNotInserted, "Makale eklenemedi.");
                }
            }
            else
            {
                resultMessage.Errors = new ErrorMessageObj(ErrorMessageCode.ArticleSlugAlreadyExists, "İlgili makalenin kısa url(slug) başka makale tarafından kullanılmakta.");
            }
            return(resultMessage);
        }