Commit 7ba3d39f by 段启岩

完善问题表单校验

parent 3f9889ae
......@@ -6,12 +6,13 @@ 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.core.validation.groups.InsertGroup;
import cn.meteor.beyondclouds.core.validation.groups.UpdateGroup;
import cn.meteor.beyondclouds.modules.question.bean.QuestionDetails;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException;
import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException;
import cn.meteor.beyondclouds.modules.question.form.QuestionForm;
import cn.meteor.beyondclouds.modules.question.form.QuestionUpdateForm;
import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.question.service.IQuestionTagService;
import cn.meteor.beyondclouds.modules.question.util.QuestionUtils;
......@@ -21,7 +22,9 @@ 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.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
......@@ -56,7 +59,7 @@ public class QuestionApi {
*/
@ApiOperation("发布问题")
@PostMapping("/question")
public Response postQuestion(@RequestBody @Valid QuestionForm questionForm, BindingResult result, @CurrentSubject Subject subject){
public Response postQuestion(@RequestBody @Validated(InsertGroup.class) QuestionForm questionForm, BindingResult result, @CurrentSubject Subject subject){
if (result.hasErrors()) {
return Response.fieldError(result.getFieldError());
}
......@@ -113,7 +116,7 @@ public class QuestionApi {
*/
@ApiOperation("修改问题")
@PutMapping("/question/{questionId}")
public Response modifyQuestion(@PathVariable("questionId") String questionId, @RequestBody @Valid QuestionUpdateForm questionForm, BindingResult result, @CurrentSubject Subject subject){
public Response modifyQuestion(@PathVariable("questionId") String questionId, @RequestBody @Validated(UpdateGroup.class) QuestionForm questionForm, BindingResult result, @CurrentSubject Subject subject){
if (result.hasErrors()) {
return Response.fieldError(result.getFieldError());
}
......@@ -121,7 +124,6 @@ public class QuestionApi {
//将问题表单转换为问题对象
Question question = new Question();
BeanUtils.copyProperties(questionForm,question);
question.setCategoryId(Integer.valueOf(questionForm.getCategoryId()));
//2.设置问题ID
question.setQuestionId(questionId);
......@@ -130,11 +132,15 @@ public class QuestionApi {
question.setUserId((String) subject.getId());
//4.祛除重复标签
HashSet<String> tags = QuestionUtils.toHashSet(questionForm.getTagIds());
HashSet<String> tags = null;
if (!CollectionUtils.isEmpty(questionForm.getTagIds())) {
tags = QuestionUtils.toHashSet(questionForm.getTagIds());
}
//5.祛除重复话题
HashSet<String> topicIds = QuestionUtils.toHashSet(questionForm.getTopicIds());
HashSet<String> topicIds = null;
if (!CollectionUtils.isEmpty(questionForm.getTopicIds())) {
topicIds = QuestionUtils.toHashSet(questionForm.getTopicIds());
}
//6.修改问题
try {
questionService.updateQuestion(question, questionForm.getQuestionDetail(), tags, topicIds);
......
package cn.meteor.beyondclouds.modules.question.form;
import cn.meteor.beyondclouds.core.validation.constraints.ElementNotBlank;
import cn.meteor.beyondclouds.core.validation.constraints.NullOrNotBlank;
import cn.meteor.beyondclouds.core.validation.groups.InsertGroup;
import cn.meteor.beyondclouds.core.validation.groups.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -20,26 +24,32 @@ public class QuestionForm {
private static final long serialVersionUID=1L;
@ApiModelProperty("类别ID")
@NotNull(message = "问题类别ID不能为空")
@NotNull(message = "问题类别ID不能为空", groups = InsertGroup.class)
private Integer categoryId;
@ApiModelProperty("标题")
@NotNull(message = "问题标题不能为空")
@NotEmpty(message = "问题标题不能为空")
@NotNull(message = "问题标题不能为空", groups = InsertGroup.class)
@NotEmpty(message = "问题标题不能为空", groups = InsertGroup.class)
@Size(max = 256, message = "问题标题太长")
@NullOrNotBlank(message = "请传入有效的标题", groups = UpdateGroup.class)
private String questionTitle;
@ApiModelProperty("摘要")
@Size(max = 256, message = "问题摘要太长")
private String questionAbstract;
@ApiModelProperty("标签")
@Size(max = 12, message = "问题标签个数不能超过5个")
@Size(min = 1, message = "请至少传一个tagId")
@Size(max = 5, message = "问题标签个数不能超过5个")
@ElementNotBlank(message = "tag内容不能为空")
private List<String> tagIds;
@ApiModelProperty("话题ID")
@Size(min = 1, message = "请至少传一个topicId")
@ElementNotBlank(message = "topic内容不能为空")
private List<String> topicIds;
@ApiModelProperty("详情")
private String questionDetail;
@ApiModelProperty("话题ID")
private List<String> topicIds;
}
......@@ -68,7 +68,7 @@ public class QuestionReplyCommentServiceImpl extends ServiceImpl<QuestionReplyCo
}
QuestionReplyComment parentQuestionReplyComment = null;
//2.判断评论是否存在
//2.判断评论是否存在
if (!StringUtils.isEmpty(parentId)) {
QueryWrapper<QuestionReplyComment> questionReplyCommentQueryWrapper = new QueryWrapper<>();
questionReplyCommentQueryWrapper.eq("reply_id",replyId)
......
......@@ -121,6 +121,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
if (!CollectionUtils.isEmpty(topicIds)) {
// 获取要引用的话题,不正确的话题ID会被自动过滤
List<String> existsTopicIds = topicService.listByIds(topicIds).stream().map(Topic::getTopicId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existsTopicIds)) {
List<TopicReference> topicReferenceList = new ArrayList<>();
for (String topicId : existsTopicIds) {
......@@ -141,7 +142,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
//5.判断是否引用标签
if (!CollectionUtils.isEmpty(tagIds)) {
List<String> existsTagIds = tagService.listByIds(tagIds).stream().map(Tag::getTagId).collect(Collectors.toList());
List<String> existsTagIds = tagService.listByIds(tagIds).stream().filter(tag -> tag.getTagType() == 2).map(Tag::getTagId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existsTagIds)) {
List<QuestionTag> questionTagList = new ArrayList<>();
for (String tagId : existsTagIds) {
......@@ -193,12 +194,13 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateQuestion(Question question, String questionDetail, HashSet<String> tagIds, HashSet<String> topicIds) throws QuestionServiceException {
//1.判断自己是否发布过此问题
QueryWrapper<Question> questionQueryWrapper = new QueryWrapper<>();
questionQueryWrapper.eq("question_id",question.getQuestionId())
.eq("user_id",question.getUserId());
.eq("user_id",question.getUserId());
Question questionInDb = getOne(questionQueryWrapper);
if (null == questionInDb) {
throw new QuestionServiceException(QuestionErrorCode.QUESTION_NOT_FOUND);
......@@ -209,18 +211,19 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
if (!question.getQuestionTitle().endsWith(QUESTION_END_EN) && !question.getQuestionTitle().endsWith(QUESTION_END_CN)){
throw new QuestionServiceException(QuestionErrorCode.QUESTION_END_ERROR);
}
}
//3.检查问题分类是否存在
QuestionCategory questionCategory = questionCategoryService.getById(question.getCategoryId());
if (null == questionCategory) {
throw new QuestionServiceException(QuestionErrorCode.INCORRECT_CATEGORY);
if (null != question.getCategoryId()) {
QuestionCategory questionCategory = questionCategoryService.getById(question.getCategoryId());
if (null == questionCategory) {
throw new QuestionServiceException(QuestionErrorCode.INCORRECT_CATEGORY);
}
question.setCategory(questionCategory.getCategory());
}
//2.更新问题信息
question.setCategory(questionCategory.getCategory());
update(question,QuestionUtils.getWrapper("question_id",question.getQuestionId()));
updateById(question);
//3.更新问题扩展信息
if (!StringUtils.isEmpty(questionDetail)) {
......@@ -263,7 +266,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
//5.判断是否引用标签
if (!CollectionUtils.isEmpty(tagIds)) {
List<String> existsTagIds = tagService.listByIds(tagIds).stream().map(Tag::getTagId).collect(Collectors.toList());
List<String> existsTagIds = tagService.listByIds(tagIds).stream().filter(tag -> 2 == tag.getTagType()).map(Tag::getTagId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existsTagIds)) {
// 删除旧标签
QueryWrapper<QuestionTag> questionTagQueryWrapper = new QueryWrapper<>();
......@@ -309,6 +312,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
for (TopicReference topicReference : references ) {
topics.add(topicService.getById(topicReference.getTopicId()));
}
if (CollectionUtils.isEmpty(topics)) {
question.setTopics(List.of());
} else {
......@@ -335,8 +339,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
public IPage<Question> getUserQuestionPage(Integer pageNumber, Integer pageSize, String userId) {
IPage<Question> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Question> questionQueryWrapper = new QueryWrapper<>();
questionQueryWrapper.eq("q.user_id", userId);
questionQueryWrapper.orderByDesc("q.create_time");
questionQueryWrapper.eq("q.user_id", userId)
.orderByDesc("q.create_time");
return questionMapper.selectPageWithTags(page, questionQueryWrapper);
}
......
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