24/12/24
게시판 조회
내가 만든 api
GETNumber 게시판 IDString 게시판 이름조회니까 Get
받을 값이 여러개니까 List
프론트엔트에 응답을 보낼게 BoardResponse
❓엔티티로 받으면 안되나요? -> 왜냐면 엔티티에는 중요한 데이터들이 들어있기 때문에 분리를 해줘야함
input값은 board전체니까 필요없음
//BoardController
@GetMapping("/boards")
public List<BoardResponse> getBoard(){
return boardService.findAll();
}
//BoardService
public List<BoardResponse> findAll() {
List<Board> boards = boardRepository.findAll();
return boards.stream().map(board -> new BoardResponse(board.getName(), board.getId())).toList();
}
boardRepository.findAll()이 함수는 List<Board>타입이니까 이걸 boardResponse형태로 바꿔줘야한다. 왜? 우리는 List<BoardResponse>이걸 내보내줘야 이걸 받아서 controller에서 반환해주니까!
public record BoardResponse(
String name,
Long id) {
}
응답을 보낼 애는 따로 dto를 만들어줘야한다. entity는 누구도 몰라야하기 때문에 응답받을 애와 달라야한다.
게시판 생성
API
POSTString 게시판 이름//controller
@PostMapping("/boards")
public BoardResponse createBoard(@RequestBody BoardRequest boardRequest){
return boardService.create(boardRequest);
}
BoardRequest로 요청받을 값을 가져오고(요청받을 값이니까 requestBody- 주로 여러개일때? 사용한다고 함)
//service
public BoardResponse create(BoardRequest boardRequest) {
Board board = boardRepository.save(new Board(boardRequest.name()));
BoardResponse boardResponse = new BoardResponse(board.getName(), board.getId());
return boardResponse;
}
요청과 응답은 있어야한다. 둘 다 따로따로 구별해줘야함
//response
public record BoardResponse(
String boardName,
Long id) {
}
게시판 이름 수정
API
PUTString 게시판 이름프론트에서 주는 데이터는 없을 수도 있다. 따라서 항상 findById를 해야한다. 실제로 데이터 베이스에 있는건지 확인해야한다.
//게시판 수정
//controller
@PutMapping("/boards/{boardId}")
public void putBoard(@PathVariable Long boardId, @RequestBody BoardRequest boardRequest){
boardService.update(boardId, boardRequest);
}
내가 id를 받아서 id를 수정하는게 아니니까, 요청되는 값도 받아야한다. 따라서 path와, body둘다 받아야한다.
//service
@Transactional
public void update(Long boardId, BoardRequest boardRequest) {
Board board = boardRepository.findById(boardId).orElseThrow();
board.setName(boardRequest.name());
}
@Transactional: 트렌젝션
롤백 되거나 커밋되거나
롤백: 없었던 일로 되돌린다.커밋: DB에 실제로 반영되는것
ex) 쇼핑몰 결제를 했는데 중간에 뭔가 에러가 나서 결제 취소가 되면, 돈은 다시 들어와야하는데 트렉젠션이 없으면 중간에 돈이 증발되어버리는 현상이 발생한다. 이걸 막아주는 역할!
게시판 삭제
API
DELETENumber 게시판 IDStringString 삭제된 게시판 ID//controller
//게시판 삭제
@DeleteMapping("/boards/{boardId}")
public void deleteBoard(@PathVariable Long boardId){
boardService.delete(boardId);
}
//service
public void delete(Long boardId) {
Board board = boardRepository.findById(boardId).orElseThrow();
boardRepository.delete(board);
}
😐 느낀점
일단, 아직은 처음이라 어려운,,응,,
1. 응답, 요청은 entity와는 분명히 독립되어야한다.
2. 내가 어떤 값을 요청받을 건지도 잘 파악해야한다.
3. API를 잘 설계해야한다.