diff --git a/src/main/java/com/ll/spring_additional/base/initData/NotProd.java b/src/main/java/com/ll/spring_additional/base/initData/NotProd.java index 6f1ce97..a21a00b 100644 --- a/src/main/java/com/ll/spring_additional/base/initData/NotProd.java +++ b/src/main/java/com/ll/spring_additional/base/initData/NotProd.java @@ -38,11 +38,11 @@ public void run(String... args) throws Exception { for (int i = 1; i <= 300; i++) { String subject = String.format("테스트 데이터입니다:[%03d]", i); String content = "내용무"; - questionService.create(subject, content, user1); + questionService.create(subject, content, user1, 0); } - Question question1 = questionService.create("질문입니닷", "질문이에요!", user2); - Question question2 = questionService.create("질문입니닷22", "질문이에요!22", user2); + Question question1 = questionService.create("질문입니닷", "질문이에요!", user2, 0); + Question question2 = questionService.create("질문입니닷22", "질문이에요!22", user2, 0); Answer answer1 = answerService.create(question1, "답변1", user1); Answer answer2 = answerService.create(question1, "답변2", user1); diff --git a/src/main/java/com/ll/spring_additional/boundedContext/home/controller/HomeController.java b/src/main/java/com/ll/spring_additional/boundedContext/home/controller/HomeController.java index 26556e3..4e42afc 100644 --- a/src/main/java/com/ll/spring_additional/boundedContext/home/controller/HomeController.java +++ b/src/main/java/com/ll/spring_additional/boundedContext/home/controller/HomeController.java @@ -8,6 +8,6 @@ public class HomeController { @GetMapping("/") public String root() { - return "redirect:/question/list"; + return "redirect:/question/list/qna"; } } diff --git a/src/main/java/com/ll/spring_additional/boundedContext/question/controller/QuestionController.java b/src/main/java/com/ll/spring_additional/boundedContext/question/controller/QuestionController.java index b353955..394a997 100644 --- a/src/main/java/com/ll/spring_additional/boundedContext/question/controller/QuestionController.java +++ b/src/main/java/com/ll/spring_additional/boundedContext/question/controller/QuestionController.java @@ -21,6 +21,7 @@ import com.ll.spring_additional.boundedContext.answer.service.AnswerService; import com.ll.spring_additional.boundedContext.question.entity.Question; import com.ll.spring_additional.boundedContext.question.form.QuestionForm; +import com.ll.spring_additional.boundedContext.question.questionEnum.QuestionEnum; import com.ll.spring_additional.boundedContext.question.service.QuestionService; import com.ll.spring_additional.boundedContext.user.entity.SiteUser; import com.ll.spring_additional.boundedContext.user.service.UserService; @@ -37,10 +38,18 @@ public class QuestionController { private final AnswerService answerService; - @GetMapping("/list") - public String list(Model model, @RequestParam(value = "page", defaultValue = "0") int page + @GetMapping("/list/{type}") + public String list(Model model, @PathVariable String type, @RequestParam(value = "page", defaultValue = "0") int page , @RequestParam(value = "kw", defaultValue = "") String kw) { - Page paging = questionService.getList(page, kw); + int category = switch (type) { + case "qna" -> QuestionEnum.QNA.getStatus(); + case "free" -> QuestionEnum.FREE.getStatus(); + case "bug" -> QuestionEnum.BUG.getStatus(); + default -> throw new RuntimeException("올바르지 않은 접근입니다."); + }; + + model.addAttribute("boardName", category); + Page paging = questionService.getList(category, page, kw); model.addAttribute("paging", paging); return "question/question_list"; } @@ -108,29 +117,52 @@ public String increaseHit(Integer questionId, @RequestParam(required = false) Bo } @PreAuthorize("isAuthenticated()") - @GetMapping("/create") - public String questionCreate(QuestionForm questionForm) { + @GetMapping("/create/{type}") + public String showCreate(@PathVariable String type, QuestionForm questionForm, Model model) { + switch (type) { + case "qna" -> model.addAttribute("boardName", "질문과답변 작성"); + case "free" -> model.addAttribute("boardName", "자유게시판 작성"); + case "bug" -> model.addAttribute("boardName", "버그및건의 작성"); + default -> throw new RuntimeException("올바르지 않은 접근입니다."); + } + return "question/question_form"; } @PreAuthorize("isAuthenticated()") - @PostMapping("/create") - public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult, Principal principal) { + @PostMapping("/create/{type}") + public String questionCreate(@Valid QuestionForm questionForm, @PathVariable String type, BindingResult bindingResult, Principal principal) { if (bindingResult.hasErrors()) { return "question/question_form"; } + + int category = switch (type) { + case "qna" -> QuestionEnum.QNA.getStatus(); + case "free" -> QuestionEnum.FREE.getStatus(); + case "bug" -> QuestionEnum.BUG.getStatus(); + default -> throw new RuntimeException("올바르지 않은 접근입니다."); + }; + SiteUser siteUser = userService.getUser(principal.getName()); - questionService.create(questionForm.getSubject(), questionForm.getContent(), siteUser); - return "redirect:/question/list"; + questionService.create(questionForm.getSubject(), questionForm.getContent(), siteUser, category); + return "redirect:/question/list/%s".formatted(type); } @PreAuthorize("isAuthenticated()") @GetMapping("/modify/{id}") - public String questionModify(QuestionForm questionForm, @PathVariable("id") Integer id, Principal principal) { + public String questionModify(QuestionForm questionForm, @PathVariable("id") Integer id, Principal principal, Model model) { Question question = questionService.getQuestion(id); if (!question.getAuthor().getUsername().equals(principal.getName())) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다."); } + + switch (question.getCategoryAsEnum()) { + case QNA-> model.addAttribute("boardName", "질문과답변 수정"); + case FREE -> model.addAttribute("boardName", "자유게시판 수정"); + case BUG -> model.addAttribute("boardName", "버그및건의 수정"); + default -> throw new RuntimeException("올바르지 않은 접근입니다."); + } + questionForm.setSubject(question.getSubject()); questionForm.setContent(question.getContent()); return "question/question_form"; diff --git a/src/main/java/com/ll/spring_additional/boundedContext/question/entity/Question.java b/src/main/java/com/ll/spring_additional/boundedContext/question/entity/Question.java index f6db27e..dd95d8d 100644 --- a/src/main/java/com/ll/spring_additional/boundedContext/question/entity/Question.java +++ b/src/main/java/com/ll/spring_additional/boundedContext/question/entity/Question.java @@ -13,6 +13,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import com.ll.spring_additional.boundedContext.answer.entity.Answer; +import com.ll.spring_additional.boundedContext.question.questionEnum.QuestionEnum; import com.ll.spring_additional.boundedContext.user.entity.SiteUser; import jakarta.persistence.CascadeType; @@ -73,4 +74,38 @@ public void updateView() { this.view++; } + /* 게시판 분류 + 0 : 질문답변 + 1 : 강좌 + 2 : 자유게시판 + */ + private int category; + + public QuestionEnum getCategoryAsEnum() { + switch (this.category) { + case 0: + return QuestionEnum.QNA; + case 1: + return QuestionEnum.FREE; + case 2: + return QuestionEnum.BUG; + default: + throw new RuntimeException("올바르지 않은 접근입니다."); + } + } + + public String getCategoryAsString() { + switch (this.category) { + case 0: + return "질문과답변"; + case 1: + return "자유게시판"; + case 2: + return "버그및건의"; + default: + throw new RuntimeException("올바르지 않은 접근입니다."); + } + } + + } diff --git a/src/main/java/com/ll/spring_additional/boundedContext/question/questionEnum/QuestionEnum.java b/src/main/java/com/ll/spring_additional/boundedContext/question/questionEnum/QuestionEnum.java new file mode 100644 index 0000000..2187ba4 --- /dev/null +++ b/src/main/java/com/ll/spring_additional/boundedContext/question/questionEnum/QuestionEnum.java @@ -0,0 +1,16 @@ +package com.ll.spring_additional.boundedContext.question.questionEnum; + +import lombok.Getter; + +@Getter +public enum QuestionEnum { + QNA(0), + FREE(1), + BUG(2); + + private int status; + + QuestionEnum(int status) { + this.status = status; + } +} diff --git a/src/main/java/com/ll/spring_additional/boundedContext/question/repository/QuestionRepository.java b/src/main/java/com/ll/spring_additional/boundedContext/question/repository/QuestionRepository.java index 4ed7ff0..5121292 100644 --- a/src/main/java/com/ll/spring_additional/boundedContext/question/repository/QuestionRepository.java +++ b/src/main/java/com/ll/spring_additional/boundedContext/question/repository/QuestionRepository.java @@ -22,12 +22,15 @@ public interface QuestionRepository extends JpaRepository { + "left outer join Answer a on a.question=q " + "left outer join SiteUser u2 on a.author=u2 " + "where " + + " (q.category = :category) " + + " and ( " + " q.subject like %:kw% " + " or q.content like %:kw% " + " or u1.username like %:kw% " + " or a.content like %:kw% " - + " or u2.username like %:kw% ") - Page findAllByKeyword(@Param("kw") String kw, Pageable pageable); + + " or u2.username like %:kw% " + + " )") + Page findAllByKeywordAndType(@Param("kw") String kw, @Param("category") Integer category, Pageable pageable); Long countByAuthor(SiteUser author); @@ -65,4 +68,5 @@ public interface QuestionRepository extends JpaRepository { + " or u2.username like %:kw% " + " )") Page findAllByKeywordAndAnswer_AuthorId(@Param("kw") String kw, @Param("authorId") Long authorId, Pageable pageable); + } \ No newline at end of file diff --git a/src/main/java/com/ll/spring_additional/boundedContext/question/service/QuestionService.java b/src/main/java/com/ll/spring_additional/boundedContext/question/service/QuestionService.java index debc152..c001daf 100644 --- a/src/main/java/com/ll/spring_additional/boundedContext/question/service/QuestionService.java +++ b/src/main/java/com/ll/spring_additional/boundedContext/question/service/QuestionService.java @@ -13,6 +13,7 @@ import com.ll.spring_additional.base.exception.DataNotFoundException; import com.ll.spring_additional.boundedContext.question.entity.Question; +import com.ll.spring_additional.boundedContext.question.questionEnum.QuestionEnum; import com.ll.spring_additional.boundedContext.user.entity.SiteUser; import com.ll.spring_additional.boundedContext.question.repository.QuestionRepository; @@ -24,11 +25,11 @@ public class QuestionService { private final QuestionRepository questionRepository; - public Page getList(int page, String kw) { + public Page getList(int category, int page, String kw) { List sorts = new ArrayList<>(); sorts.add(Sort.Order.desc("createDate")); Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts)); //페이지 번호, 개수 - return questionRepository.findAllByKeyword(kw, pageable); + return questionRepository.findAllByKeywordAndType(kw, category, pageable); } public Question getQuestion(Integer id) { @@ -48,11 +49,12 @@ public Question updateQuestionView(Question question) { } @Transactional - public Question create(String subject, String content, SiteUser user) { + public Question create(String subject, String content, SiteUser user, int category) { Question q = new Question(); q.setSubject(subject); q.setContent(content); q.setAuthor(user); + q.setCategory(category); questionRepository.save(q); return q; } diff --git a/src/main/resources/templates/answer/recent_list.html b/src/main/resources/templates/answer/recent_list.html index 82f91e1..5644c61 100644 --- a/src/main/resources/templates/answer/recent_list.html +++ b/src/main/resources/templates/answer/recent_list.html @@ -15,7 +15,7 @@
가장 최근에 달린 답변 15개까지 나타납 - - + - diff --git a/src/main/resources/templates/common/layout.html b/src/main/resources/templates/common/layout.html index 097d422..9d6f9b7 100644 --- a/src/main/resources/templates/common/layout.html +++ b/src/main/resources/templates/common/layout.html @@ -16,6 +16,15 @@ + + + + diff --git a/src/main/resources/templates/question/question_form.html b/src/main/resources/templates/question/question_form.html index 1123b9d..2316387 100644 --- a/src/main/resources/templates/question/question_form.html +++ b/src/main/resources/templates/question/question_form.html @@ -1,6 +1,6 @@
-
질문등록
+
diff --git a/src/main/resources/templates/question/question_list.html b/src/main/resources/templates/question/question_list.html index 995a862..01ddb3d 100644 --- a/src/main/resources/templates/question/question_list.html +++ b/src/main/resources/templates/question/question_list.html @@ -1,78 +1,101 @@ -
-
- -
- -
- - -
- -
-
- - - - - - - - - - - - - - - - - - - -
번호제목글쓴이작성일시조회수
- - - -
- -
-