이번에는 프로젝트에 구상 단계에서 예상했던 기능들을 만들어 보았습니다. ( jpa 에서의 repository는 기본 CRUD 기능은 구현이 되어있기 때문에 생략하겠습니다. )
// /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;
}
}
// /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);
}
}
// /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에서 확인할 수 있습니다.