Spring Boot 게시판 만들기(RemakeBoard) - 06 ( Service 작성 )

FFTL:)·2021년 7월 23일
0

RemakeBoard

목록 보기
7/8
post-custom-banner

이번에는 프로젝트에 구상 단계에서 예상했던 기능들을 만들어 보았습니다. ( jpa 에서의 repository는 기본 CRUD 기능은 구현이 되어있기 때문에 생략하겠습니다. )

프로젝트 구상하기

- User

// /service/UserService.java

@RequiredArgsConstructor
@Service
public class UserService {

    private final UserRepository userRepository;

    /** 유저를 생성하는 saveUser 입니다. */
    public User saveUser(SaveUserDto saveUserDto){
        User user = userRepository.save(saveUserDto.toEntity());
        return user;
    }

    /** username(id)를 통해 회원정보를 찾아내는 findByUsername 입니다. */
    public User findByUsername(String username){
        User user = userRepository.findByUsername(username);
        return user;
    }

    /** userId(pk)를 통해 회원정보를 찾아내는 findByUserId 입니다. */
    public User findByUserId(Long userId){
        User user = userRepository.findById(userId).orElseThrow();
        return user;
    }

    /** user 정보를 수정할 수 있는 updateUser 입니다. */
    public User updateUser(User user, SaveUserDto saveUserDto){
        user.updateUser(saveUserDto);
        return user;
    }

    /** user 정보를 삭제하는 deleteUser 입니다. */
    public boolean deleteUser(User user){
        userRepository.delete(user);
        return true;
    }
}

- Board

// /service/BoardService.java

@RequiredArgsConstructor
@Service
public class BoardService {

    private final BoardRepository boardRepository;

    /** 게시글을 생성하는 saveBoard 입니다. */
    public Long saveBoard(SaveBoardDto saveBoardDto){
        Board board = boardRepository.save(saveBoardDto.toEntity());
        return board.getBoardId();
    }

    /** 게시글 하나의 정보를 가져오는 findByBoardId 입니다. */
    public Board findByBoardId(Long boardId){
        Board board = boardRepository.findById(boardId).orElseThrow();
        return board;
    }

    /** 모든 게시글의 정보를 가져오는 findAllBoard 입니다. (목록 부분에 사용)*/
    public List<Board> findAllBoard(){
        List<Board> boards = boardRepository.findAll();
        return boards;
    }

    /** 게시글을 수정하는 updateBoard 입니다.*/
    public Board updateBoard(Board board, SaveBoardDto saveBoardDto) {
        board.updateBoard(saveBoardDto);
        return board;
    }

    /** 게시글을 삭제하는 deleteBoard 입니다. */
    public void deleteBoard(Board board){
        boardRepository.delete(board);
    }

}

- Comment

// /service/BoardService.java

@RequiredArgsConstructor
@Service
public class CommentService {

    private final CommentRepository commentRepository;

    /** 댓글을 생성하는 saveComment 입니다. */
    public Comment saveComment(SaveCommentDto saveCommentDto){
        Comment comment = commentRepository.save(saveCommentDto.toEntity());

        return comment;
    }

    /** 댓글 하나를 조회하는 findByCommentId 입니다. (사용할 데가 없으려나..)*/
    public Comment findByCommentId(Long commentId){
        Comment comment = commentRepository.findById(commentId).orElseThrow();

        return comment;
    }

    /** boardId(pk) 게시글 아이디에 연관된 모든 댓글을 가져오는 findAllComment 입니다. */
    public List<Comment> findAllComment(Long boardId){
        List<Comment> comments = commentRepository.findByBoardId(boardId);

        return comments;
    }
    
    /** 댓글 수정할 수 있는 updateComment 입니다. */
    public void updateComment(Comment comment, SaveCommentDto saveCommentDto){
        comment.updateContent(saveCommentDto);
    }

    /** 댓글을 삭제할 수 있는 deleteComment 입니다. */
    public void deleteComment(Comment comment){
        commentRepository.delete(comment);
    }
}

이렇게 사용하는 Entity에 대한 Service의 틀을 만들어 보았습니다. 이렇게 만들어진 Service의 기능들을 이용하여 Controller에서 받아들인 요청에 알맞는 동작들을 시행하게 만들어 줘야 합니다.

해당 내용의 프로젝트는 Github에서 확인할 수 있습니다.

profile
생각하는 개발자가 되자!
post-custom-banner

0개의 댓글