이번에는 저번에 만들었던 Service를 이용하여 실제 요청을 받아들이는 Controller를 만들어보도록 하겠습니다.
Cotroller도 Service와 동일하게 User, Board, Comment가 존재합니다.
// controller/UserController
@RequiredArgsConstructor
@RequestMapping(value = "/user")
@RestController
public class UserController {
private final JwtTokenProvider jwtTokenProvider;
private final UserService userService;
/** 회원가입 입니다. */
@PostMapping(value="")
public String saveUser(@RequestBody SaveUserDto saveUserDto){
User user = userService.saveUser(saveUserDto);
return user.getUserId().toString();
}
/** 회원정보 조회 입니다. */
@GetMapping(value="/{userId}")
public String findUser(@PathVariable Long userId){
User user = userService.findByUserId(userId);
return user.toString();
}
/** 토큰을 이용한 조회 입니다. */
@GetMapping(value="")
public User getUser(HttpServletRequest req){
String username = jwtTokenProvider.getUserName(jwtTokenProvider.resolveToken(req));
User user = userService.findByUsername(username);
return user;
}
/** 로그인 기능입니다. token을 반환해 줍니다. */
@PostMapping(value="/login")
public String login(@RequestBody LoginDto loginDto){
boolean check = false;
String userToken = "Nothing Token";
User user = userService.findByUsername(loginDto.getUsername());
if(user.getUserId() > 0){
if(user.getPassword().equals(loginDto.getPassword())){
check = true;
}
}
if(check){
System.out.println("check true!!");
userToken = jwtTokenProvider.createToken(user.getUsername(), user.getRoles());
}
return userToken;
}
/** 회원정보 변경 입니다. */
@PatchMapping(value="{userId}")
public String updateUser(@PathVariable Long userId, @RequestBody SaveUserDto saveUserDto){
User user = userService.findByUserId(userId);
userService.updateUser(user, saveUserDto);
return "update success";
}
/** 회원정보 삭제 입니다. */
@DeleteMapping(value="{userId}")
public String deleteUser(@PathVariable Long userId){
User user = userService.findByUserId(userId);
userService.deleteUser(user);
return "delete success";
}
}
User Controller 에는 JwtTokenProvider가 존재합니다. 로그인을 할 때에 token을 생성해주어 앞으로의 요청에 token을 이용한 인증에 사용하기 위함입니다.
// controller/BoardController
@RequestMapping(value = "/board")
@RequiredArgsConstructor
@RestController
public class BoardController {
private final BoardService boardService;
/** 게시글 작성 입니다. */
@PostMapping(value="")
public String saveBoard(@RequestBody SaveBoardDto saveBoardDto){
Long boardId = boardService.saveBoard(saveBoardDto);
return boardId.toString();
}
/** 게시글 조회 입니다. */
@GetMapping(value="/{boardId}")
public String findOneBoard(@PathVariable Long boardId){
Board board = boardService.findByBoardId(boardId);
return board.toString();
}
/** 게시글 전체 조회 입니다. */
@GetMapping(value="")
public List<Board> findAllBoard(){
List<Board> boards = boardService.findAllBoard();
return boards;
}
/** 게시글 수정 입니다. */
@PatchMapping(value="/{boardId}")
public String updateBoard(@PathVariable Long boardId, @RequestBody SaveBoardDto saveBoardDto){
Board board = boardService.findByBoardId(boardId);
Board updatedBoard = boardService.updateBoard(board, saveBoardDto);
return updatedBoard.toString();
}
/** 게시글 삭제 입니다. */
@DeleteMapping(value="/{boardId}")
public String deleteBoard(@PathVariable Long boardId){
Board board = boardService.findByBoardId(boardId);
boardService.deleteBoard(board);
return "success delete";
}
}
// controller/CommentController
@RequestMapping(value="/comment")
@RequiredArgsConstructor
@RestController
public class CommentController {
private final CommentService commentService;
/** 댓글 입력 입니다. */
@PostMapping(value="")
public Comment saveComment(@RequestBody SaveCommentDto saveCommentDto){
Comment comment = commentService.saveComment(saveCommentDto);
return comment;
}
/** 댓글 전체조회(게시글 기준) 입니다. */
@GetMapping(value="/{boardId}")
public List<Comment> findAllBoard(@PathVariable Long boardId){
List<Comment> comments = commentService.findAllComment(boardId);
return comments;
}
/** 댓글 수정 입니다. */
@PatchMapping(value="/{commentId}")
public String updateComment(@PathVariable Long commentId, @RequestBody SaveCommentDto saveCommentDto){
Comment comment = commentService.findByCommentId(commentId);
commentService.updateComment(comment, saveCommentDto);
return "success!";
}
/** 댓글 삭제 입니다. */
@DeleteMapping(value="/{commentId}")
public String deleteBoard(@PathVariable Long commentId){
Comment comment = commentService.findByCommentId(commentId);
commentService.deleteComment(comment);
return "success!";
}
}
이렇게 필요한 기능들에 대한 요청을 작성해보았습니다. 입력 데이터는 @RequestBody를 이용하여 각각 필요한 Dto를 만들어 받아왔고, Id(pk)값들은 @PathVariable을 통해서 받아 왔습니다.
지금은 일단 DB에 입력되는 것 만을 확인하기 위한 작성이었습니다. 현재에는 예외처리와 규격화 된 Response처리가 되어있지 않습니다.
다음에는 예외처리와 Response를 깔끔하게 하기위한 작업을 해보도록 하겠습니다.
*예외처리 : 빈 값이 들어오거나 올바르지 않은 값이 들어왔을 때에 대한 반응 처리
해당 내용의 프로젝트는 Github에서 확인할 수 있습니다.