자바 공부/스프링공부

Jpa를 이용하여 게시판 만들어 보기 3

ari0930 2024. 8. 19. 00:30

Jpa를 이용하여 게시판 만들어 보기 3

게시글 작성/수정/삭제

로그인을 한 상태에서만 게시글을 작성할 수 있도록 게시글 작성 하는 클릭버튼에

    function createBoard(){
        var info="${userInfo}";
        if(info){
            window.location.href = "/board/create";

        }
        else{
            alert("로그인해주세요")
        }

세션값이 있는지 없는지 체크 할수 있도록 하였다.

 

게시글 작성 버튼을 누르면 이렇게 게시글을 작성할 수 있는 페이지로 넘어가며 작성하였다면

이렇게 작성한 게시글 목록이 나타난다.

작성한 게시글을 클릭하면

이렇게 내용물을 확인 할수 있으면 수정 삭제 버튼 같은 경우 게시글 작성자 아이디로 로그인하지 않으면 버튼이 나타나지 않는다.

수정하기 버튼을 누를 경우 게시글 작성하기와 같은 화면으로 넘어가서 수정할수 있고 삭제하기 버튼을 누르면 현재 보고 있는 게시글이 삭제된다.

 

컨트롤러

//게시판 페이지 진입
    @GetMapping("")
    public String boardMain(Model model){
        model.addAttribute("LIST",boardService.list());

        return "board";
    }

    //게시글작성페이지로
    @GetMapping("/create")
    public String create(){
        return "create";
    }

    //게시글 작성
    @PostMapping("/create-content")
    public String createContent(String title, String contents, HttpSession session, RedirectAttributes redirectAttributes){
        Board board = new Board();
        board.setTitle(title);
        board.setContents(contents);
        Users users=(Users) session.getAttribute("userInfo");
        board.setUserName(users.getName());
        board.setUserId(users.getId());
        board.setState(1);
        board.setCreated(LocalDateTime.now());
        boolean check =boardService.createContent(board);
        if (check){
            return "redirect:/board";
        }
        else {
            redirectAttributes.addFlashAttribute("create", "게시글 등록 실패");
            return "redirect:/board";

        }



    }

    //게시글 확인
    @GetMapping("/view")
    public String viewPost(
            @RequestParam("boardId") Long boardId,
            Model model,HttpSession session) {

        //보더 아이디로 게시글  내용 조회 하기
        Board board = boardService.viewPost(boardId);

        //세션의 정보 확인 절차

        boolean check=boardService.postCheck(session,board);

        //댓글 조회
        List<Comment> comments = commentService.commentFind(boardId);

        Users users =(Users)session.getAttribute("userInfo");

        if (users!=null){
            model.addAttribute("userid",users.getId());
        }

        // 받은 파라미터를 사용한 로직 작성
        model.addAttribute("Board", board);
        model.addAttribute("check",check);
        model.addAttribute("comments",comments);


        return "viewPost"; // viewPost.jsp로 데이터 전달
    }

    //게시글 수정페이지로 진입
    @GetMapping("/edit")
    public String editPage(@RequestParam("boardId")Long boardId,
                           Model model){
        Board board = boardService.viewPost(boardId);

        model.addAttribute("Board", board);
        return "editPage";
    }

    //게시글 수정
    @PostMapping("/edit-post")
    public String editPost(String title, String contents,Long boardId, HttpSession session, RedirectAttributes redirectAttributes) {
        Board board = boardService.viewPost(boardId);
        board.setTitle(title);
        board.setContents(contents);
        board.setUpdated(LocalDateTime.now());
        boolean check = boardService.editPage(board);
        if (check) {
            redirectAttributes.addFlashAttribute("create", "게시글 수정 성공");
            return "redirect:/board";
        } else {
            redirectAttributes.addFlashAttribute("create", "게시글 수정 실패");
            return "redirect:/board";

        }
    }

        //게시글 삭제
        @PostMapping("/delete")
        public String delete(@RequestParam("boardId")Long boardId,
                             RedirectAttributes redirectAttributes){

            Board board = boardService.viewPost(boardId);
            board.setDeleted(LocalDateTime.now());
            board.setState(0);
            boolean check = boardService.editPage(board);


            if (check) {
                redirectAttributes.addFlashAttribute("create", "게시글 삭제 성공");
                return "redirect:/board";
            } else {
                redirectAttributes.addFlashAttribute("create", "게시글 삭제 실패");
                return "/board";

            }
        }

 

서비스

    //게시글 작성
    @Transactional
    public boolean createContent(Board board) {
        try {
            boardRepository.save(board);
            return true; // 저장 성공 시 true 반환
        } catch (Exception e) {
            // 예외 발생 시 false 반환
            return false;
        }
    }

    //목록조회
    public List<Board> list(){
        return boardRepository.findByState(1);
    }

    //게시글 내용 조히회
    public Board viewPost(Long boardId){
        return boardRepository.findByBoardId(boardId);
    }

    //게시글 수정 삭제 가능한지 본인확인 절차
    public boolean postCheck(HttpSession session,Board board){
        Users users = (Users)session.getAttribute("userInfo") ;
        if (users == null) {
            return false;
        }
        if((users.getId()).equals(board.getUserId())){
            return true;
        }
        else{
            return false;
        }

    }

    //게시글 수정/삭제
    @Transactional
    public boolean editPage(Board board) {
        try {
            boardRepository.save(board);
            return true; // 저장 성공 시 true 반환
        } catch (Exception e) {
            // 예외 발생 시 false 반환
            return false;
        }
    }

 

반응형