
맡은 업무 : 게시판 CRUD 구현
package com.sparta.champions_league.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name="boards")
public class Board extends Timestamped{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long boardNum;
private String title;
private String content;
}
package com.sparta.champions_league.controller;
import com.sparta.champions_league.dto.BoardRequestDto;
import com.sparta.champions_league.dto.BoardResponseDto;
import com.sparta.champions_league.dto.BoardUpdateDto;
import com.sparta.champions_league.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class BoardController {
private final BoardService boardService;
@GetMapping("/boards/{boardNum}")
public BoardResponseDto getBoard(@PathVariable Long boardNum) {
return boardService.getBoard(boardNum);
}
@GetMapping("/boards")
public List<BoardResponseDto> getAllBoards() {
return boardService.getAllBoards();
}
@PostMapping("/boards")
public BoardResponseDto createBoard(@RequestBody BoardRequestDto requestDto) {
return boardService.createBoard(requestDto);
}
@PutMapping("/boards/{boardNum}")
public BoardUpdateDto updateBoard(@PathVariable Long boardNum, @RequestBody BoardRequestDto requestDto) {
return boardService.updateBoard(boardNum, requestDto);
}
@DeleteMapping("/boards/{boardNum}")
public ResponseEntity<String> deleteBoard(@PathVariable Long boardNum) {
boardService.deleteBoard(boardNum);
return new ResponseEntity<>("게시물 삭제 되었습니다.", HttpStatusCode.valueOf(200));
}
}
package com.sparta.champions_league.service;
import com.sparta.champions_league.dto.BoardRequestDto;
import com.sparta.champions_league.dto.BoardResponseDto;
import com.sparta.champions_league.dto.BoardUpdateDto;
import com.sparta.champions_league.entity.Board;
import com.sparta.champions_league.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
public BoardResponseDto getBoard(Long boardNum) {
return boardRepository.findById(boardNum)
.map(BoardResponseDto::new)
.orElseThrow(() -> new IllegalArgumentException("해당 게시글을 찾을 수 없습니다."));
}
public List<BoardResponseDto> getAllBoards() {
List<Board> boards = boardRepository.findAllByOrderByCreatedAtDesc();
if (boards.isEmpty()) {
throw new IllegalArgumentException("먼저 작성하여 소식을 알려보세요!");
}
return boards.stream()
.map(BoardResponseDto::new)
.toList();
}
public BoardResponseDto createBoard(BoardRequestDto requestDto) {
Board board = new Board();
board.setTitle(requestDto.getTitle());
board.setContent(requestDto.getContent());
boardRepository.save(board);
return new BoardResponseDto(board);
}
@Transactional
public BoardUpdateDto updateBoard(Long boardNum, BoardRequestDto requestDto) {
Board board = boardRepository.findById(boardNum).orElseThrow(
() -> new IllegalArgumentException("선택한 게시물이 없습니다."));
board.setTitle(requestDto.getTitle());
board.setContent(requestDto.getContent());
Board updatedBoard = boardRepository.save(board);
return new BoardUpdateDto(updatedBoard);
}
public void deleteBoard(Long boardNum) {
Board board = boardRepository.findById(boardNum).orElseThrow(
() -> new IllegalArgumentException("선택한 게시물이 없습니다."));
boardRepository.delete(board);
}
}
package com.sparta.champions_league.repository;
import com.sparta.champions_league.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface BoardRepository extends JpaRepository<Board, Long> {
List<Board> findAllByOrderByCreatedAtDesc();
}
package com.sparta.champions_league.dto;
import lombok.Getter;
@Getter
public class BoardRequestDto {
private String title;
private String content;
}
package com.sparta.champions_league.dto;
import com.sparta.champions_league.entity.Board;
import lombok.Getter;
@Getter
public class BoardResponseDto {
private Long boardNum;
private String title;
private String content;
public BoardResponseDto(Board board) {
this.boardNum = board.getBoardNum();
this.title = board.getTitle();
this.content = board.getContent();
}
}
package com.sparta.champions_league.dto;
import com.sparta.champions_league.entity.Board;
import lombok.Getter;
@Getter
public class BoardUpdateDto {
private Long boardNum;
private String title;
private String content;
public BoardUpdateDto(Board board) {
this.boardNum = board.getBoardNum();
this.title = board.getTitle();
this.content = board.getContent();
}
}
📝오늘의 회고
CRUD에 대해 명확하게 알아가는 시간이 되었다.