ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [내일배움캠프] 1월 18일 수요일 TIL 회고록
    카테고리 없음 2023. 1. 18. 22:34

    오늘 한 것 : 심부름 요청 수락 / 거절하기, 심부름 요청을 수락할 시 도와준 횟수 추가하기, 익셉션 수정

     

    심부름 요청 수락 / 거절 기능 구현을 하려고 진짜 머리를 엄청 쥐어짜냈다..

    컨트롤러에서 addStatus 객체를 만들고 서비스에서 객체가 호출되면 count를 ++ 하려고 했으나 내 머라속에서 어떻게 적어야할지 

    모르겠어서 다른 팀이 만든 좋아요 기능을 참고 해 만들어 보기로 했다.

    먼저 Status 엔티티를 만들었다.

    Id와 board, matchBoard 를 선언했다. board, matchboard에 ManyToOne 어노테이션을 사용했다.

    원래 이렇게 하면 안될 것 같아서 주석으로 나중에 수정해야 할 것 같다고 적어뒀다.

    내일 수정을 해봐야겠다. ㅠㅠ

    // 심부름 수락 및 거절 기능을 만들기 위한 엔티티
    // 좋아요 기능을 따라 구현해서 나중에 수정을 무조건 해야할 것 같아요
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Status_ID")
    private Long Id;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "BOARD_ID")
    private Board board;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MATCHBOARD_ID")
    private MatchBoard matchBoard;

     

    그 다음 MatchBoard 컨트롤러에 심부름 신청글 수락 기능을 만들었다.

    내가 생각했을때는 일단 board_id와 matchBoard_id 가 있어야지 수락기능을 만들 수 있을거라 생각해서 선언했다.

    그 다음 matchBoardService에 board_id와 matchboard_id를 받는 addStatus 를 만든 후 boolean 타입인 statusCheck에 값을 저장되게 만들었다.

    그 다음 if문을 사용하여 값이 있을시 수락이 완료되었습니다. 라고 출력하게 만들었고, 값이 없을시 이미 수락이 완료된 게시물이라고 출력하게 만들었다.

    // 심부름 신청글 수락
    @PostMapping("/api/board/{board_id}/matchboard/{matchboard_id}")
    public ResponseEntity addStatus(@PathVariable Long board_id, @PathVariable Long matchboard_id){
        boolean statusCheck = matchBoardService.addStatus(board_id,matchboard_id);
        if (statusCheck) {
            return new ResponseEntity<>("수락이 완료되었습니다", HttpStatus.OK);
        } else {
            return new ResponseEntity<>("이미 수락이 완료된 게시물입니다.",HttpStatus.OK);
        }
    }

     

    MatchBoardService

    좋아요 기능을 참고하여 만든거라 아직 잘 이해가 되지 않는다.. 내일 수정하면서 수정 된 것을 이해해봐야겠다.

    @Override
    public boolean addStatus(Long boardId, Long matchboardId) {
        Board board = boardRepository.findById(boardId).orElseThrow(
                BoardException.BoardNotFoundException::new
        );
    
        MatchBoard matchBoard = matchBoardRepository.findById(matchboardId).orElseThrow(
                MatchException.MatchNotFoundException::new
        );
        List<Status> addStatus= helpStatusRepository.findByUserAndMatchBoard(board,matchBoard);
        if (addStatus.isEmpty()) {
            helpStatusRepository.save(new Status(board,matchBoard));
            matchBoard.addhelpCount();
            return true;
        }
        throw new MatchException.AlreadyApplyMatchException();
    }

    위와 같은 방식으로 좋아요 삭제도 비슷하게 만들었다. 일단 코드로 봤을때 빨간 불은 안들어와서 내일 구현을 전부 한 뒤 에러가 나면 수정해 봐야겠다.

     

    심부름 요청을 수락할 시 도와준 횟수 추가하기

     

    MatchBoard Entity

    @ColumnDefault() 어노테이션을 사용하면 기본 값을 지정할 수 있다. 카운트는 0부터 시작해야 하니 0으로 지정해줬다.

    그리고 addhelpcount() 를 만들어서 호출되면 help_cnt를 1 올리게 만들었다.

    @Column(nullable = false)
    public int help_cnt;
    // @ColumnDefault 어노테이션 사용으로 기본 값 0부터 시작
    // ServiceImpl에서 수락을 할 시 해당 카운트가 올라가도록 해놨는데 잘 될지 모르겠어요
    @ColumnDefault("0")
    public void addhelpCount() {
        help_cnt += 1;
    }

    그리고 서비스에서 위에 만든 수락 / 거절 기능에서 수락이 되면 카운트를 올리도록 만들었다.

    이게 잘 될지는 모르겠다. ㅋㅋㅋ 내일 실행해봐야 알 것 같다.

    if (addStatus.isEmpty()) {
        helpStatusRepository.save(new Status(board,matchBoard));
        matchBoard.addhelpCount();
        return true;

     

    익셉션은 팀원분이 만들어준 익셉션을 사용해서 만들었다.

    전부 다 실행해봐야 알아서 문시해알은 내일부터 가능할 것 같다.

     

    내일 목표: Status 깔끔하게 고쳐보기, 에러나는지 테스트, 기능 오류없이 구현 해 보기

Designed by Tistory.