Commit 77e20d49 by 段启岩

发表项目评论

parent dbc8bb11
......@@ -46,6 +46,9 @@ public class ProjectApi {
@ApiOperation("发布项目")
@PostMapping("/project")
public Response publishProject(@RequestBody @Valid ProjectForm projectForm, BindingResult bindingResult, @CurrentSubject Subject subject) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
// 将项目表单转换为项目对象
Project project = new Project();
......
package cn.meteor.beyondclouds.modules.project.api;
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.project.exception.ProjectCommentServiceException;
import cn.meteor.beyondclouds.modules.project.form.ProjectCommentForm;
import cn.meteor.beyondclouds.modules.project.service.IProjectCommentService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* 项目评论接口
* @author 段启岩
*/
@RestController
public class ProjectCommentApi {
private IProjectCommentService projectCommentService;
@Autowired
public ProjectCommentApi(IProjectCommentService projectCommentService) {
this.projectCommentService = projectCommentService;
}
/**
* 发表评论
* @param projectId
* @param projectCommentForm
* @param bindingResult
* @param subject
* @return
*/
@ApiOperation("发表评论")
@PostMapping("/project/{projectId}/comment")
public Response publishProjectComment(@PathVariable Integer projectId,
@RequestBody @Valid ProjectCommentForm projectCommentForm,
BindingResult bindingResult, @CurrentSubject Subject subject) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
try {
// 发表评论
projectCommentService.publishComment(projectId, projectCommentForm.getParentId(),
projectCommentForm.getComment(), (String) subject.getId());
return Response.success();
} catch (ProjectCommentServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
}
package cn.meteor.beyondclouds.modules.project.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* @author 段启岩
*/
public enum ProjectCommentErrorCode implements IErrorCode {
PARENT_COMMENT_NOT_FOUND(100001,"父评论不存在");
private long code;
private String msg;
ProjectCommentErrorCode(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.project.exception;
import cn.meteor.beyondclouds.core.IErrorCode;
import cn.meteor.beyondclouds.core.exception.ServiceException;
/**
* 项目业务异常类
*/
public class ProjectCommentServiceException extends ServiceException {
public ProjectCommentServiceException(long errorCode, String errorMsg) {
super(errorCode, errorMsg);
}
public ProjectCommentServiceException(IErrorCode errorCode) {
super(errorCode);
}
}
package cn.meteor.beyondclouds.modules.project.form;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* 项目评论表单
* @author 段启岩
*/
@Data
public class ProjectCommentForm {
private Integer parentId;
@NotEmpty(message = "评论内容不能为空")
private String comment;
}
package cn.meteor.beyondclouds.modules.project.service;
import cn.meteor.beyondclouds.modules.project.entity.ProjectComment;
import cn.meteor.beyondclouds.modules.project.exception.ProjectCommentServiceException;
import com.baomidou.mybatisplus.extension.service.IService;
/**
......@@ -13,4 +14,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IProjectCommentService extends IService<ProjectComment> {
/**
* 发表评论
* @param projectId
* @param parentId
* @param comment
* @param userId
*/
void publishComment(Integer projectId, Integer parentId, String comment, String userId) throws ProjectCommentServiceException;
}
package cn.meteor.beyondclouds.modules.project.service.impl;
import cn.meteor.beyondclouds.modules.project.entity.Project;
import cn.meteor.beyondclouds.modules.project.entity.ProjectComment;
import cn.meteor.beyondclouds.modules.project.enums.ProjectCommentErrorCode;
import cn.meteor.beyondclouds.modules.project.enums.ProjectErrorCode;
import cn.meteor.beyondclouds.modules.project.exception.ProjectCommentServiceException;
import cn.meteor.beyondclouds.modules.project.mapper.ProjectCommentMapper;
import cn.meteor.beyondclouds.modules.project.service.IProjectCommentService;
import cn.meteor.beyondclouds.modules.project.service.IProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
......@@ -17,4 +23,48 @@ import org.springframework.stereotype.Service;
@Service
public class ProjectCommentServiceImpl extends ServiceImpl<ProjectCommentMapper, ProjectComment> implements IProjectCommentService {
private IProjectService projectService;
@Autowired
public void setProjectService(IProjectService projectService) {
this.projectService = projectService;
}
@Override
public void publishComment(Integer projectId, Integer parentId, String comment, String userId) throws ProjectCommentServiceException {
// 1. 查询项目是否存在
Project project = projectService.getById(projectId);
if (null == project) {
throw new ProjectCommentServiceException(ProjectErrorCode.PROJECT_NOT_FOUND);
}
// 2.如果有parentId,查询父级评论是否存在
ProjectComment parentComment = null;
if (null != parentId) {
parentComment = getById(parentId);
if (null == parentComment) {
throw new ProjectCommentServiceException(ProjectCommentErrorCode.PARENT_COMMENT_NOT_FOUND);
}
}
// 3.保存评论
ProjectComment projectComment = new ProjectComment();
projectComment.setProjectId(projectId);
projectComment.setUserId(userId);
projectComment.setParentId(parentId);
projectComment.setComment(comment);
save(projectComment);
// 4.更新评论的深度和路径信息
if (null == parentComment) {
// 一级评论
projectComment.setDepth(0);
projectComment.setThread("/" + projectComment.getCommentId());
} else {
// 子级评论
projectComment.setDepth(parentComment.getDepth() + 1);
projectComment.setThread(parentComment.getThread() + "/" + projectComment.getCommentId());
}
updateById(projectComment);
}
}
......@@ -41,9 +41,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
private IProjectCommentService projectCommentService;
@Autowired
public ProjectServiceImpl(IProjectExtService projectExtService, ProjectCategoryMapper projectCategoryMapper, IProjectCommentService projectCommentService) {
public ProjectServiceImpl(IProjectExtService projectExtService, ProjectCategoryMapper projectCategoryMapper ) {
this.projectExtService = projectExtService;
this.projectCategoryMapper = projectCategoryMapper;
}
@Autowired
public void setProjectCommentService(IProjectCommentService projectCommentService) {
this.projectCommentService = projectCommentService;
}
......
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