
맡은 업무 : 인증인가 추가 및 setter 제거 및 ManyToOne, JoinColumn 추가
@Entity
@Getter
@NoArgsConstructor
@Table(name="boards")
public class Board extends Timestamped{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long boardNum;
private String title;
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_num")
private User user;
public Board(String title, String content, User user) {
this.title = title;
this.content = content;
this.user = user;
}
public void update(String title, String content, User user) {
this.title = title;
this.content = content;
this.user = user;
}
}
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.security.UserDetailsImpl;
import com.sparta.champions_league.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class BoardController {
private final BoardService boardService;
//Board 단건 조회
@GetMapping("/boards/{boardNum}")
public BoardResponseDto getBoard(@PathVariable Long boardNum) {
return boardService.getBoard(boardNum);
}
//Board 전체 조회
@GetMapping("/boards")
public List<BoardResponseDto> getAllBoards() {
return boardService.getAllBoards();
}
//Board 생성
@PostMapping("/boards")
public BoardResponseDto createBoard(@RequestBody BoardRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
return boardService.createBoard(requestDto,userDetails.getUser());
}
//Board 수정
@PutMapping("/boards/{boardNum}")
public BoardUpdateDto updateBoard(@PathVariable Long boardNum, @RequestBody BoardRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
return boardService.updateBoard(boardNum, requestDto, userDetails.getUser());
}
//선택 Board 삭제
@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.entity.User;
import com.sparta.champions_league.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
//Board 단건 조회
public BoardResponseDto getBoard(Long boardNum) {
return boardRepository.findById(boardNum)
.map(BoardResponseDto::new)
.orElseThrow(() -> new IllegalArgumentException("해당 게시글을 찾을 수 없습니다."));
}
//Board 전체 조회
public List<BoardResponseDto> getAllBoards() {
List<Board> boards = boardRepository.findAllByOrderByCreatedAtDesc();
if (boards.isEmpty()) {
throw new IllegalArgumentException("먼저 작성하여 소식을 알려보세요!");
}
return boards.stream()
.map(BoardResponseDto::new)
.toList();
}
//Board 생성
public BoardResponseDto createBoard(BoardRequestDto requestDto, User user) {
Board board = new Board(requestDto.getTitle(), requestDto.getContent(),user);
boardRepository.save(board);
return new BoardResponseDto(board);
}
//Board 수정
@Transactional
public BoardUpdateDto updateBoard(Long boardNum, BoardRequestDto requestDto, User user) {
Board board = boardRepository.findById(boardNum).orElseThrow(
() -> new IllegalArgumentException("선택한 게시물이 없습니다."));
board.update(requestDto.getTitle(), requestDto.getContent(),user);
return new BoardUpdateDto(board);
}
//선택 Board 삭제
public void deleteBoard(Long boardNum) {
Board board = boardRepository.findById(boardNum).orElseThrow(
() -> new IllegalArgumentException("선택한 게시물이 없습니다."));
boardRepository.delete(board);
}
}
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();
}
}
📝오늘의 회고
@Setter를 지양해야 하기 때문에 제거 후 메서드 생성하여 진행 하였고, User와 ManyToOne으로 연결 및 JoinColumn 설정하고 인증 인가 관련하여 토큰값을 가지고 수정 및 생성 할 수 있도록 하였다.