|
|
@@ -1,16 +1,15 @@
|
|
|
package cn.reghao.tnb.search.app.blog.service;
|
|
|
|
|
|
+import cn.reghao.tnb.search.app.blog.db.repository.ArticleRepository;
|
|
|
+import cn.reghao.tnb.search.app.blog.db.repository.ArticleTagRepository;
|
|
|
import cn.reghao.tnb.search.app.blog.db.repository.CategoryRepository;
|
|
|
-import cn.reghao.tnb.search.app.blog.db.repository.QuestionRepository;
|
|
|
-import cn.reghao.tnb.search.app.blog.model.dto.ArticleDto;
|
|
|
import cn.reghao.tnb.search.app.blog.model.dto.QuestionUpdateDto;
|
|
|
+import cn.reghao.tnb.search.app.blog.model.po.Article;
|
|
|
+import cn.reghao.tnb.search.app.blog.model.po.ArticleTag;
|
|
|
import cn.reghao.tnb.search.app.blog.model.po.Category;
|
|
|
-import cn.reghao.tnb.search.app.blog.model.po.Question;
|
|
|
import cn.reghao.tnb.search.app.blog.model.vo.QuestionCount;
|
|
|
import cn.reghao.tnb.search.app.blog.model.vo.QuestionView;
|
|
|
import cn.reghao.tnb.search.app.blog.util.MarkdownUtil;
|
|
|
-import cn.reghao.jutil.jdk.string.IdGenerator;
|
|
|
-import cn.reghao.jutil.jdk.web.result.Result;
|
|
|
import jakarta.persistence.criteria.Predicate;
|
|
|
import org.springframework.data.domain.*;
|
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
|
@@ -26,68 +25,56 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Service
|
|
|
public class QuestionService {
|
|
|
- private final QuestionRepository questionRepository;
|
|
|
+ private final ArticleRepository articleRepository;
|
|
|
private final CategoryRepository categoryRepository;
|
|
|
- private final IdGenerator idGenerator;
|
|
|
+ private final ArticleTagRepository articleTagRepository;
|
|
|
|
|
|
- public QuestionService(QuestionRepository questionRepository, CategoryRepository categoryRepository) {
|
|
|
- this.questionRepository = questionRepository;
|
|
|
+ public QuestionService(ArticleRepository articleRepository, CategoryRepository categoryRepository,
|
|
|
+ ArticleTagRepository articleTagRepository) {
|
|
|
+ this.articleRepository = articleRepository;
|
|
|
this.categoryRepository = categoryRepository;
|
|
|
- this.idGenerator = new IdGenerator("question-id");
|
|
|
- }
|
|
|
-
|
|
|
- public Result addQuestion(ArticleDto articleDto) {
|
|
|
- int categoryId = articleDto.getCategoryId();
|
|
|
- Category category = categoryRepository.findById(categoryId).orElse(null);
|
|
|
- if (category == null) {
|
|
|
- category = new Category();
|
|
|
- categoryRepository.save(category);
|
|
|
- }
|
|
|
- String questionId = idGenerator.stringId();
|
|
|
- Question question = new Question(questionId, articleDto, categoryId);
|
|
|
- questionRepository.save(question);
|
|
|
- return Result.success();
|
|
|
+ this.articleTagRepository = articleTagRepository;
|
|
|
}
|
|
|
|
|
|
public void updateQuestion(QuestionUpdateDto questionUpdateDto) {
|
|
|
String questionId = questionUpdateDto.getQuestionId();
|
|
|
- Question question = questionRepository.findByQuestionId(questionId);
|
|
|
+ Article question = articleRepository.findByArticleId(questionId);
|
|
|
if (question != null) {
|
|
|
question.setTitle(questionUpdateDto.getTitle());
|
|
|
question.setContent(questionUpdateDto.getContent());
|
|
|
- questionRepository.save(question);
|
|
|
+ articleRepository.save(question);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void addWeight(String questionId) {
|
|
|
- Question question = questionRepository.findByQuestionId(questionId);
|
|
|
+ Article question = articleRepository.findByArticleId(questionId);
|
|
|
if (question != null) {
|
|
|
int weight = question.getWeight();
|
|
|
question.setWeight(weight+1);
|
|
|
- questionRepository.save(question);
|
|
|
+ articleRepository.save(question);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void minusWeight(String questionId) {
|
|
|
- Question question = questionRepository.findByQuestionId(questionId);
|
|
|
+ Article question = articleRepository.findByArticleId(questionId);
|
|
|
if (question != null) {
|
|
|
int weight = question.getWeight();
|
|
|
question.setWeight(weight-1);
|
|
|
- questionRepository.save(question);
|
|
|
+ articleRepository.save(question);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void deleteQuestions(List<String> questionIds) {
|
|
|
questionIds.forEach(questionId -> {
|
|
|
- Question question = questionRepository.findByQuestionId(questionId);
|
|
|
+ Article question = articleRepository.findByArticleId(questionId);
|
|
|
if (question != null) {
|
|
|
- questionRepository.delete(question);
|
|
|
+ articleRepository.delete(question);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
public Page<QuestionView> findQuestionByPage(int pageSize, int pageNumber, int categoryId) {
|
|
|
- Specification<Question> specification = (root, query, cb) -> {
|
|
|
+ Specification<Article> specification = (root, query, cb) -> {
|
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
|
if (categoryId != 0) {
|
|
|
predicates.add(cb.equal(root.get("categoryId"), categoryId));
|
|
|
@@ -97,32 +84,43 @@ public class QuestionService {
|
|
|
};
|
|
|
|
|
|
Pageable pageable = PageRequest.of(pageNumber-1, pageSize, Sort.by(Sort.Direction.DESC, "weight"));
|
|
|
- Page<Question> page = questionRepository.findAll(specification, pageable);
|
|
|
+ Page<Article> page = articleRepository.findAll(specification, pageable);
|
|
|
List<QuestionView> list1 = page.stream().map(question -> {
|
|
|
Category category = categoryRepository.findById(question.getCategoryId()).orElse(null);
|
|
|
String categoryName = category.getName();
|
|
|
- String tagName = question.getTag();
|
|
|
+ String tagName = getTagName(question.getArticleId());
|
|
|
return new QuestionView(question, categoryName, tagName);
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
return new PageImpl<>(list1, pageable, page.getTotalElements());
|
|
|
}
|
|
|
|
|
|
+ private String getTagName(String questionId) {
|
|
|
+ String tagName = "";
|
|
|
+ List<ArticleTag> articleTags = articleTagRepository.findByArticleId(questionId);
|
|
|
+ if (!articleTags.isEmpty()) {
|
|
|
+ Category category1 = categoryRepository.findById(articleTags.get(0).getTagId()).orElse(null);
|
|
|
+ tagName = category1 != null ? category1.getName() : "";
|
|
|
+ }
|
|
|
+
|
|
|
+ return tagName;
|
|
|
+ }
|
|
|
+
|
|
|
public List<Category> getCategories() {
|
|
|
- List<QuestionCount> questionCounts = questionRepository.findQuestionCountByGroup();
|
|
|
+ List<QuestionCount> questionCounts = articleRepository.findQuestionCountByGroup();
|
|
|
List<Integer> ids = questionCounts.stream().map(QuestionCount::getCategoryId).collect(Collectors.toList());
|
|
|
return categoryRepository.findAllById(ids);
|
|
|
}
|
|
|
|
|
|
- public Question findByQuestionId(String questionId) {
|
|
|
- return questionRepository.findByQuestionId(questionId);
|
|
|
+ public Article findByQuestionId(String questionId) {
|
|
|
+ return articleRepository.findByArticleId(questionId);
|
|
|
}
|
|
|
|
|
|
public QuestionView getQuestionView(String questionId) {
|
|
|
- Question question = questionRepository.findByQuestionId(questionId);
|
|
|
+ Article question = articleRepository.findByArticleId(questionId);
|
|
|
Category category = categoryRepository.findById(question.getCategoryId()).orElse(null);
|
|
|
String categoryName = category.getName();
|
|
|
- String tagName = question.getTag();
|
|
|
+ String tagName = getTagName(question.getArticleId());
|
|
|
|
|
|
QuestionView questionView = new QuestionView(question, categoryName, tagName);
|
|
|
String html = MarkdownUtil.getHtml(question.getContent());
|