public async Task <IResult <Article> > Create(Article article) { List <ArticleTagRelation> tempArticleRelation = new List <ArticleTagRelation>(); if (article == null || string.IsNullOrEmpty(article.Title) || string.IsNullOrEmpty(article.SeoUrl)) { return(new Result <Article>(false, Message.ModelNotValid)); } article.UserId = (await _userRepository.Get()).Id; var userEntity = await _userRepository.Get(x => x.Id == article.UserId && !x.IsDeleted); if (userEntity == null) { return(new Result <Article>(false, Message.UserNotFound)); } article.Id = Guid.NewGuid(); article.CreatedDate = DateTime.Now; await _articleRepository.Create(article); foreach (var item in article.ArticleTagRelations) { tempArticleRelation.Add(item); } foreach (var item in tempArticleRelation) { var tagmodel = new ArticleTagRelation { Id = Guid.NewGuid(), TagId = item.TagId, ArticleId = article.Id, CreatedDate = DateTime.Now, IsActive = true }; await _tagRelationRepository.Create(tagmodel); } tempArticleRelation.Clear(); await _categoryRelationRepository.Create(new ArticleCategoryRelation { Id = Guid.NewGuid(), ArticleId = article.Id, CategoryId = article.ArticleCategoryRelations.FirstOrDefault().CategoryId, CreatedDate = DateTime.Now }); return(new Result <Article>(true, article)); }
public async Task <IActionResult> AddArticle(ArticleAddViewModel model) { //Needs to move business if (!ModelState.IsValid) { return(View(model)); } string wwwRootPath = _webHostEnvironment.WebRootPath; string fileName = Path.GetFileNameWithoutExtension(model.FileImageUrl.FileName); string extension = Path.GetExtension(model.FileImageUrl.FileName); string path = Path.Combine(wwwRootPath + "/uploads/", fileName + extension); using (var fileStream = new FileStream(path, FileMode.Create)) { await model.FileImageUrl.CopyToAsync(fileStream); } model.ImageUrl = model.FileImageUrl.FileName; model.SeoUrl = model.SeoUrl.ReplaceSeoUrl(); var result = await _articleService.GetBySeoUrl(model.SeoUrl); if (result.Success && result.Data != null) { ModelState.AddModelError("SeoUrl", "SeoUrl is already taken"); return(View(model)); } var tags = model.TagName.Split(","); var article = model.Adapt <Article>(); for (int i = 0; i < tags.Length; i++) { var tagRelation = new ArticleTagRelation { Id = Guid.NewGuid(), CreatedDate = DateTime.Now }; var getTag = await _tagService.FindIdByName(tags[i]); if (getTag.Data != null) { tagRelation.TagId = getTag.Data.Id; } else { var tagModel = new Tag { Name = tags[i], SeoUrl = tags[i].ReplaceSeoUrl(), CreatedDate = DateTime.Now, Id = Guid.NewGuid() }; await _tagService.Create(tagModel); tagRelation.Tag = new Tag { Id = tagModel.Id, CreatedDate = DateTime.Now, Name = tagModel.Name, SeoUrl = tagModel.SeoUrl }; tagRelation.TagId = tagModel.Id; } article.ArticleTagRelations.Add(tagRelation); } article.ArticleCategoryRelations.Add(new ArticleCategoryRelation { Id = Guid.NewGuid(), CategoryId = model.CategoryId, CreatedDate = DateTime.Now }); await _articleService.Create(article); return(RedirectToAction("Index")); }