/// <summary> /// Handle the AddPostCommand request. /// </summary> /// <param name="request">The AddPostCommand request.</param> /// <param name="cancellationToken">A cancellation token.</param> public async Task <Result <Post> > Handle(AddPostCommand request, CancellationToken cancellationToken) { var author = await _context.Authors.SingleOrDefaultAsync(a => a.UserName.Equals(request.UserName)); if (author == null) { return(Result <Post> .Fail(new NotFoundException($"Could not find author for \"{request.UserName}\"."))); } var entity = new Post { AuthorId = author.Id, Title = request.Title, Slug = request.Title.ToPostSlug(), Description = request.Description, Content = request.Content, Categories = request.Categories, Published = request.Published, CoverUrl = request.CoverUrl, CoverCaption = request.CoverCaption, CoverLink = request.CoverLink }; entity = _postUrlHelper.ReplaceBaseUrlWithUrlFormat(entity); _context.Posts.Add(entity); var result = await _context.SaveChangesAsync(cancellationToken); if (!result.IsSuccess) { return(Result <Post> .Fail(result.Exception)); } return(Result <Post> .Success(entity)); }
/// <summary> /// Handle the UpdateBlogSettingsCommand request. /// </summary> /// <param name="request">The UpdateBlogSettingsCommand request.</param> /// <param name="cancellationToken">A cancellation token.</param> public async Task <Result <BlogSettings> > Handle(UpdateBlogSettingsCommand request, CancellationToken cancellationToken) { var entity = await _context.BlogSettings.SingleOrDefaultAsync(); if (entity == null) { entity = new BlogSettings(); } entity.Title = request.Title; entity.Description = request.Description; entity.CoverUrl = _fileUrlHelper.ReplaceBaseUrlWithUrlFormat(request.CoverUrl); entity.CoverCaption = request.CoverCaption; entity.CoverLink = request.CoverLink; if (entity.Created == DateTime.MinValue) { _context.BlogSettings.Add(entity); } else { _context.BlogSettings.Update(entity); } var result = await _context.SaveChangesAsync(true, cancellationToken); if (!result.IsSuccess) { return(Result <BlogSettings> .Fail(result.Exception)); } return(Result <BlogSettings> .Success(entity)); }
/// <summary> /// Handle the UpdatePostCommand request. /// </summary> /// <param name="request">The UpdatePostCommand request.</param> /// <param name="cancellationToken">A cancellation token.</param> public async Task <Result <Post> > Handle(UpdatePostCommand request, CancellationToken cancellationToken) { var entity = await _context.Posts.SingleOrDefaultAsync(e => e.Id.Equals(request.Id)); if (entity == null) { return(Result <Post> .Fail(new NotFoundException <Post>($"Could not find post, id: \"{request.Id}\""))); } entity.Title = request.Title; entity.Slug = request.Title.ToPostSlug(); entity.Description = request.Description; entity.Content = request.Content; entity.Categories = request.Categories; entity.Published = request.Published; entity.CoverUrl = request.CoverUrl; entity.CoverCaption = request.CoverCaption; entity.CoverLink = request.CoverLink; entity = _postUrlHelper.ReplaceBaseUrlWithUrlFormat(entity); _context.Posts.Update(entity); var result = await _context.SaveChangesAsync(true, cancellationToken); if (!result.IsSuccess) { return(Result <Post> .Fail(result.Exception)); } return(Result <Post> .Success(entity)); }
/// <summary> /// Handle the DeletePostCommand request. /// </summary> /// <param name="request">The DeletePostCommand request.</param> /// <param name="cancellationToken">A cancellation token.</param> public async Task <Result> Handle(DeletePostCommand request, CancellationToken cancellationToken) { var entity = await _context.Posts.SingleOrDefaultAsync(e => e.Id.Equals(request.Id)); if (entity == null) { return(Result.Fail(new NotFoundException <Post>($"Could not find post, id: \"{request.Id}\""))); } entity.Published = null; _context.Posts.Remove(entity); var result = await _context.SaveChangesAsync(true, cancellationToken); if (!result.IsSuccess) { return(Result.Fail(result.Exception)); } return(Result.Success()); }