Commit 7ba3d39f by 段启岩

完善问题表单校验

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