示例#1
0
            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!");
            }
示例#2
0
            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");
            }
示例#3
0
            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!");
            }