1. 글 리스트 보기
- BoardController
@GetMapping({"/", "/api/board"})
public @ResponseBody Resp<?> list(@RequestParam(required = false, value = "page", defaultValue = "0") Integer page,
@RequestParam(required = false, value = "keyword", defaultValue = "") String keyword) {
User sessionUser = (User) session.getAttribute("sessionUser");
BoardResponse.ListDTO respDTO;
if (sessionUser == null) {
respDTO = boardService.글목록보기(null, page, keyword);
} else {
respDTO = boardService.글목록보기(sessionUser.getId(), page, keyword);
}
return Resp.ok(respDTO);
}
- BoardService
public BoardResponse.ListDTO 글목록보기(Integer userId, Integer page, String keyword) {
if (userId == null) {
Long totalCount = boardRepository.totalCount(keyword);
List<Board> boards = boardRepository.findAll(page, keyword);
return new BoardResponse.ListDTO(boards, page, totalCount.intValue(), keyword);
} else {
Long totalCount = boardRepository.totalCount(userId, keyword);
List<Board> boards = boardRepository.findAll(userId, page, keyword);
return new BoardResponse.ListDTO(boards, page, totalCount.intValue(), keyword);
}
}
2. 글 상세보기
- BoardController
@GetMapping("/api/board/{id}/detail")
public @ResponseBody Resp<?> getBoardDetail(@PathVariable("id") Integer id) {
User sessionUser = (User) session.getAttribute("sessionUser");
Integer sessionUserId = (sessionUser == null ? null : sessionUser.getId());
BoardResponse.DetailDTO detailDTO = boardService.글상세보기(id, sessionUserId);
return Resp.ok(detailDTO);
}
- BoardService
@Transactional
public BoardResponse.DetailDTO 글상세보기(Integer id, Integer userId) {
Board boardPS = boardRepository.findByIdJoinUserAndReplies(id)
.orElseThrow(() -> new ExceptionApi404("자원을 찾을 수 없습니다"));
Love love = loveRepository.findByUserIdAndBoardId(userId, id)
.orElseThrow(() -> new ExceptionApi404("자원을 찾을 수 없습니다"));
Long loveCount = loveRepository.findByBoardId(id);
Integer loveId = love == null ? null : love.getId();
Boolean isLove = love == null ? false : true;
BoardResponse.DetailDTO detailDTO = new BoardResponse.DetailDTO(boardPS, userId, isLove, loveCount.intValue(), loveId);
return detailDTO;
}
3. 글 작성하기
- BoardController
@PostMapping("/s/api/board")
public @ResponseBody Resp<?> save(@Valid @RequestBody BoardRequest.SaveDTO reqDTO, Errors errors) {
User sessionUser = (User) session.getAttribute("sessionUser");
BoardResponse.DTO respDTO = boardService.글쓰기(reqDTO, sessionUser);
return Resp.ok(respDTO);
}
- BoardService
@Transactional
public BoardResponse.DTO 글쓰기(BoardRequest.SaveDTO reqDTO, User sessionUser) {
Board board = reqDTO.toEntity(sessionUser);
Board boardPS = boardRepository.save(board);
return new BoardResponse.DTO(boardPS);
}
4. 글 수정하기
- BoardController
@PutMapping("/s/api/board/{id}")
public @ResponseBody Resp<?> update(@PathVariable("id") Integer id, @Valid @RequestBody BoardRequest.UpdateDTO reqDTO, Errors errors) {
User sessionUser = (User) session.getAttribute("sessionUser");
BoardResponse.DTO respDTO = boardService.글수정하기(reqDTO, id, sessionUser.getId());
return Resp.ok(respDTO);
}
- BoardService
@Transactional
public BoardResponse.DTO 글수정하기(BoardRequest.UpdateDTO reqDTO, Integer id, Integer sessionUserId) {
Board boardPS = boardRepository.findById(id)
.orElseThrow(() -> new ExceptionApi404("자원을 찾을 수 없습니다"));
if (!boardPS.getUser().getId().equals(sessionUserId)) {
throw new ExceptionApi403("권한이 없습니다");
}
boardPS.update(reqDTO.getTitle(), reqDTO.getContent(), reqDTO.getIsPublic());
return new BoardResponse.DTO(boardPS);
} // 더티 체킹 (상태 변경해서 update)
5. 글 삭제하기
- BoardController
- BoardService
@Transactional
public void 글삭제(Integer id, Integer sessionUserId) {
Board boardPS = boardRepository.findById(id)
.orElseThrow(() -> new ExceptionApi404("자원을 찾을 수 없습니다"));
if (!boardPS.getUser().getId().equals(sessionUserId)) {
throw new ExceptionApi403("권한이 없습니다");
}
boardRepository.deleteById(id);
}
Share article