Spring Boot 게시판 만들기(RemakeBoard) - 07 ( Controller 작성 )

FFTL:)·2021년 7월 24일
0

RemakeBoard

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

이번에는 저번에 만들었던 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에서 확인할 수 있습니다.

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

0개의 댓글