public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var isTitleExist = await _context.Posts.SingleOrDefaultAsync(x => x.Title == request.Title) != null; if (isTitleExist) { throw new RestException(HttpStatusCode.BadRequest, new { title = "duplicate title is no allowed" }); } var site = await _context.Sites.SingleOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog); request.Slug = string.IsNullOrWhiteSpace(request.Slug) ? _slugGenerator.GenerateSlug(request.Title) : _slugGenerator.GenerateSlug(request.Slug); var post = _mapper.Map <Post>(request); post.Site = site; _context.Posts.Add(post); var success = await _context.SaveChangesAsync() > 0; if (success) { var postTruncatedContent = post.Title.Length > 30 ? post.Title.Substring(0, 30) + "..." : post.Title; var postAuthorUsername = post.CreatedBy.UserName; await _logger.LogActivity( site.Id, ActivityCodeEnum.PostCreate, ActivitySeverityEnum.Low, ActivityObjectEnum.Post, $"The post \"{postTruncatedContent}\" written by the user \"{postAuthorUsername}\" has been created."); return(Unit.Value); } throw new Exception("Problem saving changes!"); }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var site = await _context.Sites.SingleOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog); request.Term.Slug = string.IsNullOrWhiteSpace(request.Term.Slug) ? _slugGenerator.GenerateSlug(request.Term.Name) : _urlEncoder.Encode(request.Term.Slug.Trim().Replace(" ", "-")); var taxonomy = _mapper.Map <Create.Command, Taxonomy>(request); taxonomy.SiteId = site.Id; if (await _context.Terms.Where(x => x.Name == taxonomy.Term.Name).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { TermName = "Term name is already exists. Please change it and try again." }); } if (await _context.Terms.Where(x => x.Slug == taxonomy.Term.Slug).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { TermSlug = "Term slug is already exists. Please change it and try again." }); } _context.Taxonomies.Add(taxonomy); var success = await _context.SaveChangesAsync() > 0; if (success) { await _logger.LogActivity( site.Id, ActivityCodeEnum.TaxonomyCreate, ActivitySeverityEnum.Low, ActivityObjectEnum.Taxonomy, $"The taxonomy with type of \"{taxonomy.Type.ToString()}\" and the term name \"{taxonomy.Term.Name}\" has been created."); return(Unit.Value); } throw new Exception("Problem saving changes"); }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var isTitleExist = await _context.Posts.SingleOrDefaultAsync(x => x.Title == request.Title) != null; if (isTitleExist) { throw new RestException(HttpStatusCode.BadRequest, new { title = "duplicate title is no allowed" }); } var taxonomyPosts = request.TaxonomyPosts; foreach (var tp in request.TaxonomyPosts.ToList()) { if (tp.Taxonomy != null) { var tag = await _context.Terms.SingleOrDefaultAsync(t => t.Name == tp.Taxonomy.Term.Name); if (tag != null) { taxonomyPosts.Remove(tp); taxonomyPosts.Add(new TaxonomyPost { TaxonomyId = tag.TaxonomyId }); } } } var site = await _context.Sites.SingleOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog); request.Slug = string.IsNullOrWhiteSpace(request.Slug) ? _slugGenerator.GenerateSlug(request.Title) : _slugGenerator.GenerateSlug(request.Slug); var post = _mapper.Map <Post>(request); post.Site = site; post.ScheduledFor = request.PostStatus == PostStatusEnum.Future ? Convert.ToDateTime(request.ScheduledFor) : null; _context.Posts.Add(post); var success = await _context.SaveChangesAsync() > 0; if (request.PostStatus == PostStatusEnum.Future) { if (post.ScheduledFor != null) { await _scheduler.SetAndQueueTaskAsync(ScheduleTypeEnum.Post, post.ScheduledFor ?? DateTime.UtcNow, post.Id); } else { throw new RestException(HttpStatusCode.BadRequest, new { post = "publish date is required!" }); } } if (success) { var postTruncatedContent = post.Title.Length > 30 ? post.Title.Substring(0, 30) + "..." : post.Title; var postAuthorUsername = post.CreatedBy.UserName; await _logger.LogActivity( site.Id, ActivityCodeEnum.PostCreate, ActivitySeverityEnum.Low, ActivityObjectEnum.Post, $"The post \"{postTruncatedContent}\" written by the user \"{postAuthorUsername}\" has been created."); return(Unit.Value); } throw new Exception("Problem saving changes!"); }