49. 응답 DTO - board 나머지 만들기 v7

송민경's avatar
Mar 21, 2024
49. 응답 DTO - board 나머지 만들기 v7

1. 글 조회하기

  • 글 수정 화면시 뿌려지는 데이터
package shop.mtcoding.blog.board; import lombok.AllArgsConstructor; import lombok.Data; import shop.mtcoding.blog.reply.Reply; import shop.mtcoding.blog.user.User; import java.util.ArrayList; import java.util.List; public class BoardResponse { // 게시글 조회하기 화면 @Data public static class LookDTO { private Integer id; private String title; private String content; public LookDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); } } }
package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import shop.mtcoding.blog._core.utils.ApiUtil; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @RestController public class BoardController { private final HttpSession session; private final BoardService boardService; @GetMapping("/api/boards/{id}") public ResponseEntity<?> lookUp(@PathVariable Integer id) { BoardResponse.LookDTO respDTO = boardService.lookUp(id); return ResponseEntity.ok(new ApiUtil<>(respDTO)); } }
package shop.mtcoding.blog.board; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import shop.mtcoding.blog._core.errors.exception.Exception403; import shop.mtcoding.blog._core.errors.exception.Exception404; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Service public class BoardService { private final BoardJPARepository boardJPARepository; public BoardResponse.LookDTO lookUp(int boardId){ // 글조회 Board board = boardJPARepository.findById(boardId) .orElseThrow(() -> new Exception404("게시글을 찾을 수 없습니다")); return new BoardResponse.LookDTO(board); } }
notion image
 

2. 글 쓰기

package shop.mtcoding.blog.board; import lombok.AllArgsConstructor; import lombok.Data; import shop.mtcoding.blog.reply.Reply; import shop.mtcoding.blog.user.User; import java.util.ArrayList; import java.util.List; public class BoardResponse { // 글 쓰기 @Data public static class SaveDTO { private Integer id; private String title; private String content; public SaveDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); } } }
package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import shop.mtcoding.blog._core.utils.ApiUtil; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @RestController public class BoardController { private final HttpSession session; private final BoardService boardService; @GetMapping("/api/boards/{id}") public ResponseEntity<?> lookUp(@PathVariable Integer id) { BoardResponse.LookDTO respDTO = boardService.lookUp(id); return ResponseEntity.ok(new ApiUtil<>(respDTO)); } }
package shop.mtcoding.blog.board; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import shop.mtcoding.blog._core.errors.exception.Exception403; import shop.mtcoding.blog._core.errors.exception.Exception404; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Service public class BoardService { private final BoardJPARepository boardJPARepository; @Transactional public BoardResponse.SaveDTO save(BoardRequest.SaveDTO reqDTO, User sessionUser) { Board board = boardJPARepository.save(reqDTO.toEntity(sessionUser)); return new BoardResponse.SaveDTO(board); // sessionUser 정보는 사용되지 않으므로 제거 } }
 

3. 글 수정하기

package shop.mtcoding.blog.board; import lombok.AllArgsConstructor; import lombok.Data; import shop.mtcoding.blog.reply.Reply; import shop.mtcoding.blog.user.User; import java.util.ArrayList; import java.util.List; public class BoardResponse { // 게시글 조회하기 화면 @Data public static class UpdateDTO { private Integer id; private String title; private String content; public UpdateDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); } } }
package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import shop.mtcoding.blog._core.utils.ApiUtil; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @RestController public class BoardController { private final HttpSession session; private final BoardService boardService; @PutMapping("/api/boards/{id}") public ResponseEntity<?> update(@PathVariable Integer id, @RequestBody BoardRequest.UpdateDTO reqDTO) { User sessionUser = (User) session.getAttribute("sessionUser"); BoardResponse.UpdateDTO respDTOd = boardService.update(id, sessionUser.getId(), reqDTO); return ResponseEntity.ok(new ApiUtil<>(respDTOd)); } }
package shop.mtcoding.blog.board; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import shop.mtcoding.blog._core.errors.exception.Exception403; import shop.mtcoding.blog._core.errors.exception.Exception404; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Service public class BoardService { private final BoardJPARepository boardJPARepository; public BoardResponse.UpdateDTO update(int boardId, int sessionUserId, BoardRequest.UpdateDTO reqDTO) { // 1. 조회 및 예외처리 Board board = boardJPARepository.findById(boardId) .orElseThrow(() -> new Exception404("게시글을 찾을 수 없습니다")); board.setTitle(reqDTO.getTitle()); board.setContent(reqDTO.getContent()); return new BoardResponse.UpdateDTO(board); }
notion image
 

4. 글 삭제하기

package shop.mtcoding.blog.board; import lombok.AllArgsConstructor; import lombok.Data; import shop.mtcoding.blog.reply.Reply; import shop.mtcoding.blog.user.User; import java.util.ArrayList; import java.util.List; public class BoardResponse { // 게시글 조회하기 화면 @Data public static class DeleteDTO { private Integer id; private String title; private String content; public DeleteDTO(Board board) { this.id = board.getId(); this.title = board.getTitle(); this.content = board.getContent(); } } }
package shop.mtcoding.blog.board; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import shop.mtcoding.blog._core.utils.ApiUtil; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @RestController public class BoardController { private final HttpSession session; private final BoardService boardService; @DeleteMapping("/api/boards/{id}") public ResponseEntity<?> delete(@PathVariable Integer id) { User sessionUser = (User) session.getAttribute("sessionUser"); BoardResponse.DeleteDTO respDTO = boardService.delete(id, sessionUser.getId()); return ResponseEntity.ok(new ApiUtil<>(null)); } }
package shop.mtcoding.blog.board; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import shop.mtcoding.blog._core.errors.exception.Exception403; import shop.mtcoding.blog._core.errors.exception.Exception404; import shop.mtcoding.blog.user.User; import java.util.List; @RequiredArgsConstructor @Service public class BoardService { private final BoardJPARepository boardJPARepository; @Transactional public BoardResponse.DeleteDTO delete(int boardId, Integer sessionUserId) { Board board = boardJPARepository.findById(boardId) .orElseThrow(() -> new Exception404("게시글을 찾을 수 없습니다")); if (sessionUserId != board.getUser().getId()) { throw new Exception403("게시글을 삭제할 권한이 없습니다"); } boardJPARepository.deleteById(boardId); return new BoardResponse.DeleteDTO(board); }
notion image
Share article
RSSPowered by inblog