Commit 4a5362d0 by 段启岩

Merge remote-tracking branch 'origin/gaotong02-02'

# Conflicts:
#	src/main/resources/application.yml
parents e021758c 78ceeadc
...@@ -9,6 +9,7 @@ import cn.meteor.beyondclouds.core.api.Response; ...@@ -9,6 +9,7 @@ import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject; import cn.meteor.beyondclouds.core.bean.Subject;
import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail; import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail;
import cn.meteor.beyondclouds.modules.blog.entity.Blog; import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCategoryServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.form.PublishBlogForm; import cn.meteor.beyondclouds.modules.blog.form.PublishBlogForm;
import cn.meteor.beyondclouds.modules.blog.form.UpdateBlogForm; import cn.meteor.beyondclouds.modules.blog.form.UpdateBlogForm;
...@@ -42,7 +43,7 @@ public class BlogApi { ...@@ -42,7 +43,7 @@ public class BlogApi {
@ApiOperation("发布博客") @ApiOperation("发布博客")
@PostMapping("/blog") @PostMapping("/blog")
public Response publishBlog (@RequestBody @Valid PublishBlogForm publishBlogForm, BindingResult result, @CurrentSubject Subject subject) throws OssException { public Response publishBlog (@RequestBody @Valid PublishBlogForm publishBlogForm, BindingResult result, @CurrentSubject Subject subject) {
if (result.hasErrors()) { if (result.hasErrors()) {
return Response.fieldError(result.getFieldError()); return Response.fieldError(result.getFieldError());
} }
...@@ -51,9 +52,14 @@ public class BlogApi { ...@@ -51,9 +52,14 @@ public class BlogApi {
BeanUtils.copyProperties(publishBlogForm, blog); BeanUtils.copyProperties(publishBlogForm, blog);
blog.setUserId((String) subject.getId()); blog.setUserId((String) subject.getId());
try {
blogService.publishBlog(blog, publishBlogForm.getBlogContent(), blogService.publishBlog(blog, publishBlogForm.getBlogContent(),
publishBlogForm.getTopicIds(), publishBlogForm.getTagIds()); publishBlogForm.getTopicIds(), publishBlogForm.getTagIds());
return Response.success(); return Response.success();
} catch (BlogCategoryServiceException e) {
e.printStackTrace();
return Response.error(e);
}
} }
...@@ -115,7 +121,7 @@ public class BlogApi { ...@@ -115,7 +121,7 @@ public class BlogApi {
*/ */
@ApiOperation("他人博客列表") @ApiOperation("他人博客列表")
@GetMapping("/user/{userId}/blogs") @GetMapping("/user/{userId}/blogs")
public Response<PageVO<Blog>> getMyBlogs (@Valid PageForm pageForm , @PathVariable("userId") String userId) { public Response<PageVO<Blog>> getOtherBlogs (@Valid PageForm pageForm , @PathVariable("userId") String userId) {
IPage<Blog> blogPage = blogService.getUserBlogPage(pageForm.getPage(), pageForm.getSize(), userId); IPage<Blog> blogPage = blogService.getUserBlogPage(pageForm.getPage(), pageForm.getSize(), userId);
PageVO<Blog> blogPageVO = new PageVO<>(blogPage); PageVO<Blog> blogPageVO = new PageVO<>(blogPage);
return Response.success(blogPageVO); return Response.success(blogPageVO);
...@@ -137,7 +143,7 @@ public class BlogApi { ...@@ -137,7 +143,7 @@ public class BlogApi {
try { try {
blogService.updateBlog(blog, updateBlogForm.getContent(),updateBlogForm.getTopicIds(),updateBlogForm.getTagIds()); blogService.updateBlog(blog, updateBlogForm.getContent(),updateBlogForm.getTopicIds(),updateBlogForm.getTagIds());
return Response.success(); return Response.success();
} catch (BlogServiceException e) { } catch (BlogServiceException | BlogCategoryServiceException e) {
e.printStackTrace(); e.printStackTrace();
return Response.error(e); return Response.error(e);
} }
......
package cn.meteor.beyondclouds.modules.blog.api; package cn.meteor.beyondclouds.modules.blog.api;
import cn.meteor.beyondclouds.common.form.PageForm;
import cn.meteor.beyondclouds.common.vo.PageVO;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject; import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response; import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject; import cn.meteor.beyondclouds.core.bean.Subject;
import cn.meteor.beyondclouds.modules.blog.entity.BlogComment;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.form.BlogCommentForm; import cn.meteor.beyondclouds.modules.blog.form.BlogCommentForm;
import cn.meteor.beyondclouds.modules.blog.service.IBlogCommentService; import cn.meteor.beyondclouds.modules.blog.service.IBlogCommentService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -30,11 +35,16 @@ public class BlogCommentApi { ...@@ -30,11 +35,16 @@ public class BlogCommentApi {
@ApiOperation("发表评论") @ApiOperation("发表评论")
@PostMapping("/blog/{blogId}/comment") @PostMapping("/blog/{blogId}/comment")
public Response createComment (@PathVariable("blogId") String blogId, @RequestBody @Valid BlogCommentForm blogCommentForm, @CurrentSubject Subject subject){ public Response createComment (@PathVariable("blogId") String blogId, @RequestBody @Valid BlogCommentForm blogCommentForm, @CurrentSubject Subject subject) {
try {
blogCommentService.commentCreate(blogId, blogCommentForm.getParentId(), blogCommentService.commentCreate(blogId, blogCommentForm.getParentId(),
blogCommentForm.getComment(), (String) subject.getId()); blogCommentForm.getComment(), (String) subject.getId());
return Response.success(); return Response.success();
} catch (BlogServiceException | BlogCommentServiceException e) {
e.printStackTrace();
return Response.error(e);
}
} }
@ApiOperation("删除评论") @ApiOperation("删除评论")
...@@ -48,4 +58,21 @@ public class BlogCommentApi { ...@@ -48,4 +58,21 @@ public class BlogCommentApi {
return Response.error(e); return Response.error(e);
} }
} }
@ApiOperation("评论列表")
@GetMapping("/blog/{blogId}/comments")
public Response<PageVO<BlogComment>> getBlogCommentPage(@PathVariable("blogId") String bLogId ,
@Valid PageForm pageForm ,
@RequestParam(value = "parent_id",required = false) Integer parentId) {
//获取评论列表
try {
IPage<BlogComment> commentPage = blogCommentService.getCommentPage(pageForm.getPage(), pageForm.getSize(), bLogId, parentId);
PageVO<BlogComment> blogCommentPageVO = new PageVO<>(commentPage);
return Response.success(blogCommentPageVO);
} catch (BlogCommentServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
} }
package cn.meteor.beyondclouds.modules.blog.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* @author gaoTong
* @date 2020/2/2 10:02
*/
public enum BlogCategoryErrorCode implements IErrorCode {
INCORRECT_CATEGORY(8005,"博客分类错误")
;
private long code;
private String msg;
BlogCategoryErrorCode(long code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public long code() {
return code;
}
@Override
public String msg() {
return msg;
}
}
...@@ -8,7 +8,8 @@ import cn.meteor.beyondclouds.core.IErrorCode; ...@@ -8,7 +8,8 @@ import cn.meteor.beyondclouds.core.IErrorCode;
*/ */
public enum BlogCommentErrorCode implements IErrorCode { public enum BlogCommentErrorCode implements IErrorCode {
COMMENT_NOT_FOUND(8003,"该评论不存在"), COMMENT_NOT_FOUND(8003,"该评论不存在"),
NO_DELETE_PRIVILEGES(8004,"没有权限删除评论") NO_DELETE_PRIVILEGES(8004,"没有权限删除评论"),
PARENT_COMMENT_NOT_FOUND(8006,"父评论不存在"),
; ;
private long code; private long code;
......
package cn.meteor.beyondclouds.modules.blog.form;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author gaoTong
* @date 2020/2/1 12:11
*/
@Data
public class pageForm {
private Integer page;
private Integer size;
}
...@@ -2,6 +2,7 @@ package cn.meteor.beyondclouds.modules.blog.service; ...@@ -2,6 +2,7 @@ package cn.meteor.beyondclouds.modules.blog.service;
import cn.meteor.beyondclouds.modules.blog.entity.BlogComment; import cn.meteor.beyondclouds.modules.blog.entity.BlogComment;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.project.entity.ProjectComment; import cn.meteor.beyondclouds.modules.project.entity.ProjectComment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -23,7 +24,7 @@ public interface IBlogCommentService extends IService<BlogComment> { ...@@ -23,7 +24,7 @@ public interface IBlogCommentService extends IService<BlogComment> {
* @param comment * @param comment
* @param userId * @param userId
*/ */
void commentCreate(String blogId,Integer parentId,String comment,String userId); void commentCreate(String blogId,Integer parentId,String comment,String userId) throws BlogServiceException, BlogCommentServiceException;
/** /**
* 删除评论 * 删除评论
...@@ -31,4 +32,15 @@ public interface IBlogCommentService extends IService<BlogComment> { ...@@ -31,4 +32,15 @@ public interface IBlogCommentService extends IService<BlogComment> {
* @param userId * @param userId
*/ */
void deleteComment(Integer commentId, String userId) throws BlogCommentServiceException; void deleteComment(Integer commentId, String userId) throws BlogCommentServiceException;
/**
* 获取评论分页
* @param pageNumber
* @param size
* @param blogId
* @param parentId
* @return
*/
IPage<BlogComment> getCommentPage(Integer pageNumber, Integer size, String blogId, Integer parentId) throws BlogCommentServiceException;
} }
...@@ -5,6 +5,7 @@ import cn.meteor.beyondclouds.modules.blog.entity.Blog; ...@@ -5,6 +5,7 @@ import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.entity.BlogComment; import cn.meteor.beyondclouds.modules.blog.entity.BlogComment;
import cn.meteor.beyondclouds.modules.blog.entity.BlogExt; import cn.meteor.beyondclouds.modules.blog.entity.BlogExt;
import cn.meteor.beyondclouds.modules.blog.entity.BlogTag; import cn.meteor.beyondclouds.modules.blog.entity.BlogTag;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCategoryServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -28,7 +29,7 @@ public interface IBlogService extends IService<Blog> { ...@@ -28,7 +29,7 @@ public interface IBlogService extends IService<Blog> {
* @param topicIds * @param topicIds
* @param tagIds * @param tagIds
*/ */
void publishBlog(Blog blog , String content , List<String> topicIds , List<String> tagIds); void publishBlog(Blog blog , String content , List<String> topicIds , List<String> tagIds) throws BlogCategoryServiceException;
/** /**
* 删除博客 * 删除博客
...@@ -70,7 +71,7 @@ public interface IBlogService extends IService<Blog> { ...@@ -70,7 +71,7 @@ public interface IBlogService extends IService<Blog> {
* @param topicIds * @param topicIds
* @param tagIds * @param tagIds
*/ */
void updateBlog(Blog blog , String content , List<String> topicIds , List<String> tagIds) throws BlogServiceException; void updateBlog(Blog blog , String content , List<String> topicIds , List<String> tagIds) throws BlogServiceException, BlogCategoryServiceException;
} }
......
...@@ -3,11 +3,15 @@ package cn.meteor.beyondclouds.modules.blog.service.impl; ...@@ -3,11 +3,15 @@ package cn.meteor.beyondclouds.modules.blog.service.impl;
import cn.meteor.beyondclouds.modules.blog.entity.Blog; import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.entity.BlogComment; import cn.meteor.beyondclouds.modules.blog.entity.BlogComment;
import cn.meteor.beyondclouds.modules.blog.enums.BlogCommentErrorCode; import cn.meteor.beyondclouds.modules.blog.enums.BlogCommentErrorCode;
import cn.meteor.beyondclouds.modules.blog.enums.BlogErrorCode;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogCommentServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.mapper.BlogCommentMapper; import cn.meteor.beyondclouds.modules.blog.mapper.BlogCommentMapper;
import cn.meteor.beyondclouds.modules.blog.service.IBlogCommentService; import cn.meteor.beyondclouds.modules.blog.service.IBlogCommentService;
import cn.meteor.beyondclouds.modules.blog.service.IBlogService; import cn.meteor.beyondclouds.modules.blog.service.IBlogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,13 +35,27 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC ...@@ -31,13 +35,27 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC
this.blogService = blogService; this.blogService = blogService;
} }
/**
* 发布评论
* @param blogId
* @param parentId
* @param comment
* @param userId
* @throws BlogServiceException
* @throws BlogCommentServiceException
*/
@Override @Override
public void commentCreate(String blogId, Integer parentId, String comment, String userId) { public void commentCreate(String blogId, Integer parentId, String comment, String userId) throws BlogServiceException, BlogCommentServiceException {
//判断博客是否存在
Blog blog = blogService.getById(blogId);
if (null == blog) {
throw new BlogServiceException(BlogErrorCode.BLOG_NOT_FOUND);
}
//定义路径 //定义路径
String thread; String thread;
int depth; int depth;
//1.判断为第几级评论 //1.判断为第几级评论
if (parentId == null) { if (parentId == null) {
...@@ -45,8 +63,12 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC ...@@ -45,8 +63,12 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC
} else { } else {
QueryWrapper<BlogComment> queryWrapper = new QueryWrapper<>(); QueryWrapper<BlogComment> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("comment_id", parentId); queryWrapper.eq("comment_id", parentId)
.eq("blog_id",blogId);
BlogComment blogCommentParent = getOne(queryWrapper); BlogComment blogCommentParent = getOne(queryWrapper);
if (null == blogCommentParent) {
throw new BlogCommentServiceException(BlogCommentErrorCode.PARENT_COMMENT_NOT_FOUND);
}
depth = blogCommentParent.getDepth() + 1; depth = blogCommentParent.getDepth() + 1;
} }
...@@ -75,6 +97,12 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC ...@@ -75,6 +97,12 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC
} }
/**
* 删除评论
* @param commentId
* @param userId
* @throws BlogCommentServiceException
*/
@Override @Override
public void deleteComment(Integer commentId, String userId) throws BlogCommentServiceException { public void deleteComment(Integer commentId, String userId) throws BlogCommentServiceException {
Assert.notNull(commentId, "commentId must not be null"); Assert.notNull(commentId, "commentId must not be null");
...@@ -100,4 +128,43 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC ...@@ -100,4 +128,43 @@ public class BlogCommentServiceImpl extends ServiceImpl<BlogCommentMapper, BlogC
blogCommentQueryWrapper.like("thread", blogComment.getThread()); blogCommentQueryWrapper.like("thread", blogComment.getThread());
remove(blogCommentQueryWrapper); remove(blogCommentQueryWrapper);
} }
/**
* 评论列表
* @param pageNumber
* @param size
* @param blogId
* @param parentId
* @return
* @throws BlogCommentServiceException
*/
@Override
public IPage<BlogComment> getCommentPage(Integer pageNumber, Integer size, String blogId, Integer parentId) throws BlogCommentServiceException {
Assert.notNull(blogId, "blogId must not be null");
IPage<BlogComment> page = new Page<>(pageNumber, size);
//如果parentId为null,则只获取一级评论
if (null == parentId) {
QueryWrapper blogCommentQueryWrapper = new QueryWrapper();
blogCommentQueryWrapper.eq("blog_id", blogId);
blogCommentQueryWrapper.eq("depth", 0);
blogCommentQueryWrapper.orderByDesc("create_time");
return page(page,blogCommentQueryWrapper);
}
//如果parent不为空,则获取其子评论
BlogComment blogComment = getById(parentId);
if (null == blogComment) {
throw new BlogCommentServiceException(BlogCommentErrorCode.PARENT_COMMENT_NOT_FOUND);
}
//根据parentId查出其子评论
QueryWrapper blogCommentQueryWrapper = new QueryWrapper();
blogCommentQueryWrapper.eq("parent_id", parentId);
return page(page,blogCommentQueryWrapper);
}
} }
...@@ -2,15 +2,15 @@ package cn.meteor.beyondclouds.modules.blog.service.impl; ...@@ -2,15 +2,15 @@ package cn.meteor.beyondclouds.modules.blog.service.impl;
import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail; import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail;
import cn.meteor.beyondclouds.modules.blog.entity.Blog; import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.entity.BlogCategory;
import cn.meteor.beyondclouds.modules.blog.entity.BlogExt; import cn.meteor.beyondclouds.modules.blog.entity.BlogExt;
import cn.meteor.beyondclouds.modules.blog.entity.BlogTag; import cn.meteor.beyondclouds.modules.blog.entity.BlogTag;
import cn.meteor.beyondclouds.modules.blog.enums.BlogCategoryErrorCode;
import cn.meteor.beyondclouds.modules.blog.enums.BlogErrorCode; import cn.meteor.beyondclouds.modules.blog.enums.BlogErrorCode;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCategoryServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException; import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.mapper.BlogMapper; import cn.meteor.beyondclouds.modules.blog.mapper.BlogMapper;
import cn.meteor.beyondclouds.modules.blog.service.IBlogCommentService; import cn.meteor.beyondclouds.modules.blog.service.*;
import cn.meteor.beyondclouds.modules.blog.service.IBlogExtService;
import cn.meteor.beyondclouds.modules.blog.service.IBlogService;
import cn.meteor.beyondclouds.modules.blog.service.IBlogTagService;
import cn.meteor.beyondclouds.modules.topic.entity.TopicReference; import cn.meteor.beyondclouds.modules.topic.entity.TopicReference;
import cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService; import cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -48,6 +48,13 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -48,6 +48,13 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
private IBlogCommentService blogCommentService; private IBlogCommentService blogCommentService;
private IBlogCategoryService blogCategoryService;
@Autowired
public void setBlogCategoryService(IBlogCategoryService blogCategoryService) {
this.blogCategoryService = blogCategoryService;
}
@Autowired @Autowired
public void setBlogCommentService(IBlogCommentService blogCommentService) { public void setBlogCommentService(IBlogCommentService blogCommentService) {
this.blogCommentService = blogCommentService; this.blogCommentService = blogCommentService;
...@@ -60,19 +67,33 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -60,19 +67,33 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
this.blogExtService = blogExtService; this.blogExtService = blogExtService;
} }
/**
* 发布博客
* @param blog
* @param content
* @param topicIds
* @param tagIds
* @throws BlogCategoryServiceException
*/
@Override @Override
public void publishBlog(Blog blog, String content, List<String> topicIds, List<String> tagIds) { public void publishBlog(Blog blog, String content, List<String> topicIds, List<String> tagIds) throws BlogCategoryServiceException {
//1.保存博客 //1.判断博客类型是否存在
BlogCategory blogCategory = blogCategoryService.getById(blog.getCategoryId());
if (null == blogCategory) {
throw new BlogCategoryServiceException(BlogCategoryErrorCode.INCORRECT_CATEGORY);
}
//2.保存博客
save(blog); save(blog);
//2.存入内容 //3.存入内容
BlogExt blogExt = new BlogExt(); BlogExt blogExt = new BlogExt();
blogExt.setBlogId(blog.getBlogId()); blogExt.setBlogId(blog.getBlogId());
blogExt.setContent(content); blogExt.setContent(content);
blogExtService.save(blogExt); blogExtService.save(blogExt);
//3.判断是否引用话题 //4.判断是否引用话题
if (null != topicIds) { if (null != topicIds) {
for (String topicId : topicIds) { for (String topicId : topicIds) {
TopicReference topicReference = new TopicReference(); TopicReference topicReference = new TopicReference();
...@@ -84,7 +105,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -84,7 +105,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
} }
} }
//4.判断是否引用标签 //5.判断是否引用标签
if (null != tagIds) { if (null != tagIds) {
for (String tagId : tagIds) { for (String tagId : tagIds) {
BlogTag blogTag = new BlogTag(); BlogTag blogTag = new BlogTag();
...@@ -95,6 +116,12 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -95,6 +116,12 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
} }
} }
/**
* 删除博客
* @param userId
* @param blogId
* @throws BlogServiceException
*/
@Override @Override
public void deleteBlog(String userId, String blogId) throws BlogServiceException { public void deleteBlog(String userId, String blogId) throws BlogServiceException {
//1.判断要删除的博客是否是当前用户所有 //1.判断要删除的博客是否是当前用户所有
...@@ -133,6 +160,12 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -133,6 +160,12 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
removeById(blogId); removeById(blogId);
} }
/**
* 博客详情
* @param blogId
* @return
* @throws BlogServiceException
*/
@Override @Override
public BlogDetail getBlog(String blogId) throws BlogServiceException { public BlogDetail getBlog(String blogId) throws BlogServiceException {
...@@ -167,12 +200,25 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -167,12 +200,25 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
return blogDetail; return blogDetail;
} }
/**
* 博客列表
* @param pageNumber
* @param pageSize
* @return
*/
@Override @Override
public IPage<Blog> getBlogPage(Integer pageNumber, Integer pageSize) { public IPage<Blog> getBlogPage(Integer pageNumber, Integer pageSize) {
IPage<Blog> page = new Page<>(pageNumber, pageSize); IPage<Blog> page = new Page<>(pageNumber, pageSize);
return page(page); return page(page);
} }
/**
* 个人博客列表
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
@Override @Override
public IPage<Blog> getUserBlogPage(Integer pageNumber, Integer pageSize, String userId) { public IPage<Blog> getUserBlogPage(Integer pageNumber, Integer pageSize, String userId) {
QueryWrapper myBlogQueryWrapper = new QueryWrapper(); QueryWrapper myBlogQueryWrapper = new QueryWrapper();
...@@ -181,8 +227,17 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -181,8 +227,17 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
return page(page, myBlogQueryWrapper); return page(page, myBlogQueryWrapper);
} }
/**
* 修改博客
* @param blog
* @param content
* @param topicIds
* @param tagIds
* @throws BlogServiceException
* @throws BlogCategoryServiceException
*/
@Override @Override
public void updateBlog(Blog blog, String content, List<String> topicIds, List<String> tagIds) throws BlogServiceException { public void updateBlog(Blog blog, String content, List<String> topicIds, List<String> tagIds) throws BlogServiceException, BlogCategoryServiceException {
Assert.notNull(blog, "blog must not be null"); Assert.notNull(blog, "blog must not be null");
Assert.notNull(blog.getBlogId(), "blogId must not be null"); Assert.notNull(blog.getBlogId(), "blogId must not be null");
...@@ -193,6 +248,14 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB ...@@ -193,6 +248,14 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
throw new BlogServiceException(BlogErrorCode.BLOG_NOT_FOUND); throw new BlogServiceException(BlogErrorCode.BLOG_NOT_FOUND);
} }
//判断博客类型是否正确
if (blog.getCategoryId() != null) {
BlogCategory blogCategory = blogCategoryService.getById(blog.getCategoryId());
if (null == blogCategory) {
throw new BlogCategoryServiceException(BlogCategoryErrorCode.INCORRECT_CATEGORY);
}
}
//2.更新博客基本信息 //2.更新博客基本信息
updateById(blog); updateById(blog);
......
package cn.meteor.beyondclouds.modules.post.api;
import cn.meteor.beyondclouds.common.form.PageForm;
import cn.meteor.beyondclouds.common.vo.PageVO;
import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.post.form.PostForm;
import cn.meteor.beyondclouds.modules.post.service.IPostService;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.stream.Collectors;
/**
* @author gaoTong
* @date 2020/2/2 9:40
*/
@Api(tags = "动态API")
@RequestMapping("/api")
@RestController
public class postApi {
private IPostService postService;
@Autowired
public void setPostService(IPostService postService) {
this.postService = postService;
}
/**
* 发布动态
* @param postForm
* @param result
* @param subject
* @return
*/
@ApiOperation("发布项目")
@PostMapping("/post")
public Response publishPost(@RequestBody @Valid PostForm postForm , BindingResult result ,
@CurrentSubject Subject subject) {
//对图片进行类型转换
Post post = new Post();
BeanUtils.copyProperties(postForm, post);
if (null != post.getPictures()){
post.setPictures(postForm.getPictures()
.stream().map(String::valueOf)
.collect(Collectors.joining(",")));
}
post.setUserId((String) subject.getId());
//发布动态
try {
postService.publishPost(post);
return Response.success();
} catch (ProjectServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
/**
* 删除动态
* @param postId
* @param subject
* @return
*/
@ApiOperation("删除动态")
@DeleteMapping("/post/{postId}")
public Response deletePost(@PathVariable("postId") String postId , @CurrentSubject Subject subject) {
//删除动态
try {
postService.deletePost(postId, (String) subject.getId());
return Response.success();
} catch (PostServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
/**
* 动态列表
* @param pageForm
* @return
*/
@Anonymous
@ApiOperation("动态列表")
@GetMapping("/posts")
public Response<PageVO<Post>> getPostPage (@Valid PageForm pageForm) {
IPage<Post> postPage = postService.getPostPage(pageForm.getPage(),pageForm.getSize());
PageVO<Post> postPageVO = new PageVO<>(postPage);
return Response.success(postPageVO);
}
/**
* 我的动态列表
* @param pageForm
* @param subject
* @return
*/
@ApiOperation("我的动态列表")
@GetMapping("/my/posts")
public Response<PageVO<Post>> getMyPosts (@Valid PageForm pageForm , @CurrentSubject Subject subject) {
IPage<Post> postPage = postService.getUserPostPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
PageVO<Post> postPageVO = new PageVO<>(postPage);
return Response.success(postPageVO);
}
/**
* 获取他人动态列表
* @param userId
* @param pageForm
* @return
*/
@ApiOperation("他人动态列表")
@GetMapping("/user/{userId}/posts")
public Response<PageVO<Post>> getOtherPosts (@PathVariable("userId") String userId , @Valid PageForm pageForm) {
IPage<Post> postPage = postService.getUserPostPage(pageForm.getPage(), pageForm.getSize(), userId);
PageVO<Post> postPageVO = new PageVO<>(postPage);
return Response.success(postPageVO);
}
}
package cn.meteor.beyondclouds.modules.post.api;
/**
* @author gaoTong
* @date 2020/2/2 9:42
*/
public class postCommentApi {
}
...@@ -41,6 +41,9 @@ public class Post implements Serializable { ...@@ -41,6 +41,9 @@ public class Post implements Serializable {
@ApiModelProperty(value = "动态里面的图片") @ApiModelProperty(value = "动态里面的图片")
private String pictures; private String pictures;
@ApiModelProperty(value = "动态中的视频")
private String video;
private LocalDateTime createTime; private LocalDateTime createTime;
private LocalDateTime updateTime; private LocalDateTime updateTime;
......
package cn.meteor.beyondclouds.modules.post.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* @author gaoTong
* @date 2020/2/2 14:43
*/
public enum PostCommentErrorCode implements IErrorCode {
;
private long code;
private String msg;
PostCommentErrorCode(long code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public long code() {
return code;
}
@Override
public String msg() {
return msg;
}
}
package cn.meteor.beyondclouds.modules.post.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* @author gaoTong
* @date 2020/2/2 14:43
*/
public enum PostErrorCode implements IErrorCode {
NOT_APPEAR_SAME_TIME(10001,"视频和图片不能同时出现"),
POST_MUST_NOT_NULL(10002,"动态无内容"),
POST_NOT_FOUND(10003,"该动态不存在")
;
private long code;
private String msg;
PostErrorCode(long code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public long code() {
return code;
}
@Override
public String msg() {
return msg;
}
}
package cn.meteor.beyondclouds.modules.post.exception;
import cn.meteor.beyondclouds.core.IErrorCode;
import cn.meteor.beyondclouds.core.exception.ServiceException;
/**
* @author gaoTong
* @date 2020/2/2 9:44
*/
public class PostCommentServiceException extends ServiceException {
public PostCommentServiceException(long errorCode, String errorMsg) {
super(errorCode, errorMsg);
}
public PostCommentServiceException(IErrorCode errorCode) {
super(errorCode);
}
}
package cn.meteor.beyondclouds.modules.post.exception;
import cn.meteor.beyondclouds.core.IErrorCode;
import cn.meteor.beyondclouds.core.exception.ServiceException;
/**
* @author gaoTong
* @date 2020/2/2 9:43
*/
public class PostServiceException extends ServiceException {
public PostServiceException(long errorCode, String errorMsg) {
super(errorCode, errorMsg);
}
public PostServiceException(IErrorCode errorCode) {
super(errorCode);
}
}
package cn.meteor.beyondclouds.modules.post.form;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* @author gaoTong
* @date 2020/2/2 15:25
*/
@Data
public class PostForm {
private String content;
private List<String> pictures;
private String video;
}
package cn.meteor.beyondclouds.modules.post.service; package cn.meteor.beyondclouds.modules.post.service;
import cn.meteor.beyondclouds.modules.post.entity.Post; import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
/** /**
...@@ -13,4 +16,34 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +16,34 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IPostService extends IService<Post> { public interface IPostService extends IService<Post> {
/**
* 发布动态
* @param post
*/
void publishPost(Post post) throws ProjectServiceException;
/**
* 删除动态
* @param postId
* @param userId
*/
void deletePost(String postId , String userId) throws PostServiceException;
/**
* 动态列表
* @param pageNumber
* @param pageSize
* @return
*/
IPage<Post> getPostPage (Integer pageNumber , Integer pageSize);
/**
* 个人动态列表
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
IPage<Post> getUserPostPage (Integer pageNumber , Integer pageSize , String userId);
} }
package cn.meteor.beyondclouds.modules.post.service.impl; package cn.meteor.beyondclouds.modules.post.service.impl;
import cn.meteor.beyondclouds.modules.post.entity.Post; import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.post.mapper.PostMapper; import cn.meteor.beyondclouds.modules.post.mapper.PostMapper;
import cn.meteor.beyondclouds.modules.post.service.IPostService; import cn.meteor.beyondclouds.modules.post.service.IPostService;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -17,4 +23,91 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +23,91 @@ import org.springframework.stereotype.Service;
@Service @Service
public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IPostService { public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IPostService {
/**
* 发布动态
* @param post
* @throws ProjectServiceException
*/
@Override
public void publishPost(Post post) throws ProjectServiceException {
//1.判断是否视频和图片都传了
if (null != post.getPictures() && null != post.getVideo()) {
throw new ProjectServiceException(PostErrorCode.NOT_APPEAR_SAME_TIME);
}
//2.当有图片或者视频时可以没有内容
if (null == post.getContent() && null == post.getPictures() && null == post.getVideo()) {
throw new ProjectServiceException(PostErrorCode.POST_MUST_NOT_NULL);
}
//2.判断动态类型 0:普通动态 1:图片动态 2:视频动态
int type;
if (null == post.getVideo() && null == post.getPictures()) {
type = 0;
} else if (null == post.getVideo() && null != post.getPictures()) {
type = 1;
}else {
type = 2;
}
post.setType(type);
//2.保存动态
save(post);
}
/**
* 删除动态
* @param postId
* @param userId
* @throws PostServiceException
*/
@Override
public void deletePost(String postId, String userId) throws PostServiceException {
//1.判断是不是该用户发布的动态
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("post_id",postId);
queryWrapper.eq("user_id", userId);
Post post = getOne(queryWrapper);
if ( null == post ) {
throw new PostServiceException(PostErrorCode.POST_NOT_FOUND);
}
//2.删除动态
removeById(postId);
}
/**
* 获取博客列表
* @param pageNumber
* @param pageSize
* @return
*/
@Override
public IPage<Post> getPostPage(Integer pageNumber, Integer pageSize) {
IPage<Post> postPage = new Page<>(pageNumber,pageSize);
return page(postPage);
}
/**
*个人动态列表
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
@Override
public IPage<Post> getUserPostPage(Integer pageNumber, Integer pageSize, String userId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", userId);
queryWrapper.orderByDesc("create_time");
IPage<Post> postPage = new Page<>(pageNumber,pageSize);
return page(postPage, queryWrapper);
}
} }
...@@ -86,7 +86,7 @@ public class ProjectCommentApi { ...@@ -86,7 +86,7 @@ public class ProjectCommentApi {
@RequestParam(value = "parentId" ,required = false) Integer parentId) { @RequestParam(value = "parentId" ,required = false) Integer parentId) {
try { try {
// 根据用户获取列表并返回 // 根据用户获取列表并返回
IPage<ProjectComment>commentPage = projectCommentService.getCommentPage(pageForm.getPage(), pageForm.getSize(), projectId, parentId); IPage<ProjectComment> commentPage = projectCommentService.getCommentPage(pageForm.getPage(), pageForm.getSize(), projectId, parentId);
PageVO<ProjectComment> projectPageVO = new PageVO<>(commentPage); PageVO<ProjectComment> projectPageVO = new PageVO<>(commentPage);
return Response.success(projectPageVO); return Response.success(projectPageVO);
} catch (ProjectCommentServiceException e) { } catch (ProjectCommentServiceException e) {
......
...@@ -3,7 +3,7 @@ spring: ...@@ -3,7 +3,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: password password: 100Centa30821%mysql
swagger: swagger:
enable: true enable: true
...@@ -33,5 +33,3 @@ beyondclouds: ...@@ -33,5 +33,3 @@ beyondclouds:
client-id: 101846021 client-id: 101846021
client-secret: 5bc41deeb7e152e2e6aff97726bbf86a client-secret: 5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri: http://meteor.natapp1.cc/auth/qq redirect-uri: http://meteor.natapp1.cc/auth/qq
\ No newline at end of file
server:
port: 8081
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment