From ffabe7bb53d275307a942eedab3ca8609067acab Mon Sep 17 00:00:00 2001 From: Krockseed <66515313+Krockseed@users.noreply.github.com> Date: Fri, 3 Feb 2023 12:59:01 +0900 Subject: [PATCH 1/2] REFACTOR: board.html, list.html, detail.html FIX: BoardRepository, BoardService, BoardController --- .../com/study/joiner/JoinerApplication.java | 2 + .../joiner/repository/BoardRepository.java | 7 + .../study/joiner/service/BoardService.java | 31 ++- .../com/study/joiner/web/BoardController.java | 28 ++- .../com/study/joiner/web/IndexController.java | 32 ++- .../com/study/joiner/web/dto/BoardDto.java | 3 +- src/main/resources/templates/index.html | 126 ++++++----- src/main/resources/templates/view/board.html | 213 +++++++++--------- src/main/resources/templates/view/detail.html | 77 ++++++- src/main/resources/templates/view/list.html | 64 +++--- 10 files changed, 347 insertions(+), 236 deletions(-) diff --git a/src/main/java/com/study/joiner/JoinerApplication.java b/src/main/java/com/study/joiner/JoinerApplication.java index 7199134..e8370cd 100644 --- a/src/main/java/com/study/joiner/JoinerApplication.java +++ b/src/main/java/com/study/joiner/JoinerApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class JoinerApplication { public static void main(String[] args) { diff --git a/src/main/java/com/study/joiner/repository/BoardRepository.java b/src/main/java/com/study/joiner/repository/BoardRepository.java index a7528f2..bfced55 100644 --- a/src/main/java/com/study/joiner/repository/BoardRepository.java +++ b/src/main/java/com/study/joiner/repository/BoardRepository.java @@ -20,6 +20,13 @@ public interface BoardRepository extends JpaRepository { @Query("select b from Board b order by b.createdDate desc") Page findAllDesc(Pageable pageable); + @Query("select b from Board b order by b.createdDate desc") + List findAllDesc(); + @Query("select b from Board b left join b.socialUser u where u.email = :email order by b.createdDate desc") Page findAllByEmail(String email, Pageable pageable); + + Page findAllBy(Pageable pageable); + + Page findByTitleContaining(String keyword, Pageable pageable); } diff --git a/src/main/java/com/study/joiner/service/BoardService.java b/src/main/java/com/study/joiner/service/BoardService.java index 8f85598..83a09ba 100644 --- a/src/main/java/com/study/joiner/service/BoardService.java +++ b/src/main/java/com/study/joiner/service/BoardService.java @@ -37,8 +37,14 @@ public void addBoard(SocialUser user, BoardDto boardDto) { public Page getBoardList(int pageNum, Pageable pageable) { pageable = PageRequest.of(pageNum, pageable.getPageSize()); Page boardList = boardRepository.findAllDesc(pageable); - Page boardDtos = boardList.map(m -> new BoardDto(m)); - return boardDtos; + return boardList.map(BoardDto::new); + } + + @Transactional(readOnly = true) + public List getBoardList() { + return boardRepository.findAllDesc().stream() + .map(BoardDto::new) + .collect(Collectors.toList()); } // 회원 전체 게시글 조회(페이징 적용) -- 완 @@ -46,24 +52,30 @@ public Page getBoardList(int pageNum, Pageable pageable) { public Page getUserBoardList(String email, int pageNum, Pageable pageable) { PageRequest page = PageRequest.of(pageNum, pageable.getPageSize()); Page boardList = boardRepository.findAllByEmail(email, page); - Page boardDtos = boardList.map(m -> new BoardDto(m)); - return boardDtos; + return boardList.map(BoardDto::new); } // 다른 회원 글 상세 조회 -- 완 @Transactional(readOnly = true) public BoardDto getOtherUserBoard(Long id) { Optional board = boardRepository.findById(id); - BoardDto boardDto = new BoardDto(board.get()); - return boardDto; + return new BoardDto(board.get()); + } + + public Page getList(Pageable pageable) { +// Pageable pageable = PageRequest.of(page, 10, Sort.by(Sort.Direction.DESC, "createdAt")); + return boardRepository.findAllBy(pageable); + } + + public Page getSearchList(Pageable pageable, String keyword) { + return boardRepository.findByTitleContaining(keyword, pageable); } // 회원 글 조회 -- 완 @Transactional(readOnly = true) public BoardDto getUserBoard(Long id, SocialUser socialUser) { Board board = socialUser.getBoardList().get(Math.toIntExact(id)-1); - BoardDto boardDto = new BoardDto(board); - return boardDto; + return new BoardDto(board); } // 회원 메인페이지 상세 글 조회 @@ -72,8 +84,7 @@ public BoardDto getEditBoard(Long id, String email) { SocialUser socialUser = userRepository.findByEmail(email).orElseThrow(); Board board = boardRepository.findById(id).orElseThrow(); if(board.getSocialUser().getId().equals(socialUser.getId())) { - BoardDto boardDto = new BoardDto(board); - return boardDto; + return new BoardDto(board); } return null; } diff --git a/src/main/java/com/study/joiner/web/BoardController.java b/src/main/java/com/study/joiner/web/BoardController.java index a2081b2..7653737 100644 --- a/src/main/java/com/study/joiner/web/BoardController.java +++ b/src/main/java/com/study/joiner/web/BoardController.java @@ -9,10 +9,16 @@ import com.study.joiner.service.BoardService; import com.study.joiner.web.dto.BoardDto; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import java.util.NoSuchElementException; + @RequiredArgsConstructor @Controller public class BoardController { @@ -35,10 +41,30 @@ public String userBoardSave(@LoginUser SessionUser user, @ModelAttribute BoardDt return "redirect:/"; } + // 글 목록 + @GetMapping("/list") + public String index(@LoginUser SessionUser user, Model model, + @RequestParam(required = false) String keyword, + @PageableDefault(sort = "createdDate", direction = Sort.Direction.DESC) Pageable pageable) { + SocialUser socialUser = userRepository.findById(user.getId()).orElseThrow( + () -> new NoSuchElementException("사용자가 존재하지 않습니다.") + ); + Page paging; + + paging = keyword == null ? boardService.getList(pageable) : boardService.getSearchList(pageable, keyword); + + model.addAttribute("boards", socialUser.getBoardList()); + model.addAttribute("user", user); + model.addAttribute("paging", paging); + + return "view/list"; + } + // 글 상세 정보 -- 완 @GetMapping("/detail/{id}") - public String detail(@PathVariable Long id, Model model) { + public String detail(@PathVariable Long id, @LoginUser SessionUser user, Model model) { BoardDto boardDto = boardService.getOtherUserBoard(id); + model.addAttribute("user", user); model.addAttribute("board", boardDto); return "view/detail"; } diff --git a/src/main/java/com/study/joiner/web/IndexController.java b/src/main/java/com/study/joiner/web/IndexController.java index f028b47..abd54df 100644 --- a/src/main/java/com/study/joiner/web/IndexController.java +++ b/src/main/java/com/study/joiner/web/IndexController.java @@ -36,18 +36,28 @@ public class IndexController { private final UserRepository userRepository; // 메인페이지 -- 완 +// @GetMapping("/") +// public String index(Model model, @LoginUser SessionUser user, +// @RequestParam(value="page", defaultValue = "0") int pageNum, +// @PageableDefault(size = 9) Pageable pageable) { +// Page boardList = boardService.getBoardList(pageNum, pageable); +// int startPage = Math.max(1, boardList.getPageable().getPageNumber() - 4); +// int endPage = Math.min(boardList.getTotalPages(), boardList.getPageable().getPageNumber() + 4); +// model.addAttribute("startPage", startPage); +// model.addAttribute("endPage", endPage); +//// model.addAttribute("previous", pageable.previousOrFirst().getPageNumber()); +//// model.addAttribute("next", pageable.next().getPageNumber()); +// model.addAttribute("boardList", boardList); +// if(user != null) { +// model.addAttribute("user", user); +// } +// return "index"; +// } + @GetMapping("/") - public String index(Model model, @LoginUser SessionUser user, - @RequestParam(value="page", defaultValue = "0") int pageNum, - @PageableDefault(size = 9) Pageable pageable) { - Page boardList = boardService.getBoardList(pageNum, pageable); - int startPage = Math.max(1, boardList.getPageable().getPageNumber() - 4); - int endPage = Math.min(boardList.getTotalPages(), boardList.getPageable().getPageNumber() + 4); - model.addAttribute("startPage", startPage); - model.addAttribute("endPage", endPage); -// model.addAttribute("previous", pageable.previousOrFirst().getPageNumber()); -// model.addAttribute("next", pageable.next().getPageNumber()); - model.addAttribute("boardList", boardList); + public String index(Model model, @LoginUser SessionUser user) { + List boardDtoList = boardService.getBoardList(); + model.addAttribute("boards", boardDtoList); if(user != null) { model.addAttribute("user", user); } diff --git a/src/main/java/com/study/joiner/web/dto/BoardDto.java b/src/main/java/com/study/joiner/web/dto/BoardDto.java index b877dbb..b60eb01 100644 --- a/src/main/java/com/study/joiner/web/dto/BoardDto.java +++ b/src/main/java/com/study/joiner/web/dto/BoardDto.java @@ -5,6 +5,7 @@ import lombok.*; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; @Getter @@ -46,7 +47,7 @@ public Board toEntity() { .progressWay(progressWay) .duration(duration) .skill(skill) - .date(date) + .date(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))) .contactWay(contactWay) .title(title) .content(content) diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 57ce0d1..c65fa68 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -5,7 +5,7 @@ - Together + Joiner @@ -21,51 +21,48 @@ - - + diff --git a/src/main/resources/templates/view/board.html b/src/main/resources/templates/view/board.html index 63a7914..6450f8e 100644 --- a/src/main/resources/templates/view/board.html +++ b/src/main/resources/templates/view/board.html @@ -1,139 +1,138 @@ - + - Together + Document - + + +
+

모집에 필요한 정보를 입력해주세요

+
+ +
+
+ +
-
-
-
-

프로젝트에 대해 설명해주세요

-
+
+ + +
-
- +
+ + +
- +
+ + +
-
- -
+
+ + +
+ +
+ + +
+ +
+ +
- +
+ + +
+

프로젝트에 대해 설명해주세요

+
+
+ - - + + } ); + \ No newline at end of file diff --git a/src/main/resources/templates/view/detail.html b/src/main/resources/templates/view/detail.html index 404dd0e..661c603 100644 --- a/src/main/resources/templates/view/detail.html +++ b/src/main/resources/templates/view/detail.html @@ -5,9 +5,10 @@ - Together + Document +
-
+

-
-
-
+
+ 작성자 : + 작성일 : +
+
+ +
+
+
+
모집 구분 :
+
+
+
모집 인원 :
+
+
+
진행 방식 :
+
+
+
진행 기한 :
+
+
+
기술 스택 :
+
+
+
시작 예정일 :
+
+
+
연락 방법 :
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+ +
+ +
+
+
+
+ + + + + + + + + + +
diff --git a/src/main/resources/templates/view/list.html b/src/main/resources/templates/view/list.html index 81f8d1d..dfd8e60 100644 --- a/src/main/resources/templates/view/list.html +++ b/src/main/resources/templates/view/list.html @@ -5,7 +5,7 @@ - Together + Document @@ -13,7 +13,7 @@
From 61512ffe2e3bb3c961777c2319576bde0bb204ca Mon Sep 17 00:00:00 2001 From: Krockseed <66515313+Krockseed@users.noreply.github.com> Date: Sat, 4 Feb 2023 21:12:47 +0900 Subject: [PATCH 2/2] FIX: board --- .../java/com/study/joiner/domain/user/Board.java | 2 +- .../com/study/joiner/web/BoardController.java | 15 +++++++++------ .../java/com/study/joiner/web/dto/BoardDto.java | 5 +++-- src/main/resources/templates/view/detail.html | 2 ++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/study/joiner/domain/user/Board.java b/src/main/java/com/study/joiner/domain/user/Board.java index b29f2e6..72ae1c0 100644 --- a/src/main/java/com/study/joiner/domain/user/Board.java +++ b/src/main/java/com/study/joiner/domain/user/Board.java @@ -45,7 +45,7 @@ public class Board extends BaseTimeEntity { @Column(length = 100, nullable = false) private String title; - @Column(length = 255, nullable = false) + @Lob private String content; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/study/joiner/web/BoardController.java b/src/main/java/com/study/joiner/web/BoardController.java index 7653737..4496af7 100644 --- a/src/main/java/com/study/joiner/web/BoardController.java +++ b/src/main/java/com/study/joiner/web/BoardController.java @@ -9,6 +9,7 @@ import com.study.joiner.service.BoardService; import com.study.joiner.web.dto.BoardDto; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -21,6 +22,7 @@ @RequiredArgsConstructor @Controller +@Slf4j public class BoardController { private final BoardService boardService; private final UserRepository userRepository; @@ -70,16 +72,17 @@ public String detail(@PathVariable Long id, @LoginUser SessionUser user, Model m } // 글 수정 조회 - @GetMapping("/edit/{id}") - public String userBoardEdit(@PathVariable Long id, @LoginUser SessionUser user, Model model) { - BoardDto boardDto = boardService.getEditBoard(id, user.getEmail()); - return "view/edit"; - } +// @GetMapping("/edit/{id}") +// public String userBoardEdit(@PathVariable Long id, @LoginUser SessionUser user, Model model) { +// BoardDto boardDto = boardService.getEditBoard(id, user.getEmail()); +// return "view/edit"; +// } // 글 수정 처리 - @PutMapping("/edit/{id}") + @GetMapping("/edit/{id}") public String userBoardUpdate(@PathVariable Long id, @LoginUser SessionUser user, @ModelAttribute BoardDto boardDto) { SocialUser socialUser = userRepository.findByEmailFetchBL(user.getEmail()).orElseThrow(); + log.info("boardDto = {}", boardDto); boardService.updateBoard(id, socialUser, boardDto); return "view/detail"; } diff --git a/src/main/java/com/study/joiner/web/dto/BoardDto.java b/src/main/java/com/study/joiner/web/dto/BoardDto.java index b60eb01..6c0f36f 100644 --- a/src/main/java/com/study/joiner/web/dto/BoardDto.java +++ b/src/main/java/com/study/joiner/web/dto/BoardDto.java @@ -24,6 +24,7 @@ public class BoardDto { private String title; private String content; private List commentList; + private Long writerId; public BoardDto(Board entity) { this.id = entity.getId(); @@ -37,10 +38,11 @@ public BoardDto(Board entity) { this.title = entity.getTitle(); this.content = entity.getContent(); this.commentList = entity.getCommentList(); + this.writerId = entity.getSocialUser().getId(); } public Board toEntity() { - Board board = Board.builder() + return Board.builder() .id(id) .postRecruit(postRecruit) .recruitNum(recruitNum) @@ -52,6 +54,5 @@ public Board toEntity() { .title(title) .content(content) .build(); - return board; } } diff --git a/src/main/resources/templates/view/detail.html b/src/main/resources/templates/view/detail.html index 661c603..429d430 100644 --- a/src/main/resources/templates/view/detail.html +++ b/src/main/resources/templates/view/detail.html @@ -40,6 +40,8 @@

작성자 : 작성일 : + +