[내일배움캠프] 1월 19일 목요일 TIL 회고록
Status 부분을 수정했다.
Status Entity 가 있는게 너무 보기 싫었고, 좀 더 간편하게 할 수 있다는 팀원분에 말을 듣고 수정해봤다.
내가 맡은 부분인 MatchBoard Entity에 status를 넣고, 초기 값을 "모집중" 으로 바꾸고, upStatus 메소드를 만들어
메소드 안에 this.Status = "수락 완료" 기능을 넣어서 addStatus 메소드가 실행되면 Status가 수락 완료로 바뀌도록 만들었고
마찬가지로 downStatus 메소드를 만들고 메소드 안에 this.Status = "거절 완료" 기능을 넣어서 downStatus가 실행되면 status가
거절 완료로 바뀌도록 만들었다.
MatchBoard.Entity
status의 기본값을 "모집중"으로 선언한 뒤,
@Column(nullable = false)
public String status = "모집중";
upStatus() 메소드를 만들었다.
public void upStatus() {
this.status = "수락된 게시물";
}
똑같이 downStatus() 메소드를 만들었다.
public void downStatus() {
this.status = "거절된 게시물";
}
MatchBoardController
컨트롤러 부분은 수정을 별로 안했다. board_id와 matchboard_id 값을 매개변수로 받는 upStatus, downStatus 메서드 를 만들었다.
// 심부름 신청글 수럭
@PostMapping("/api/board/{board_id}/matchboard/{matchboard_id}/up")
public ResponseEntity upStatus(@PathVariable Long board_id, @PathVariable Long matchboard_id) {
return matchBoardService.upStatus(board_id,matchboard_id);
}
// 심부름 신청글 거절
@PostMapping("/api/board/{board_id}/matchboard/{matchboard_id}/down")
public ResponseEntity downStatus(@PathVariable Long board_id, @PathVariable Long matchboard_id) {
return matchBoardService.downStatus(board_id,matchboard_id);
}
MatchBoardServiceImpl
먼저 수락 기능부터 만들었다.
if문을 사용하여 matchBoard,status의 값이 "모집중" 이면 matchBoard.upStatus 메소드를 실행해 "수락 완료" 상태로 바꾸고,
addhelpCount 메소드도 같이 실행해 도움횟수도 1 올렸다.
그 후 else if 문을 사용해 matchBoard,status의 값이 "수락된 게시물" 이면 익셉션을 출력하게 만들었고,
다시 else if 문을 사용해 matchBoard,status의 값이 "거절된 게시물" 이면 익셉션을 출력하게 만들었다.
// status가 모집중이면 수락된 게시물로 변경 및 help_cnt 1 증가
if (matchBoard.status.equals("모집중")) {
matchBoard.upStatus();
matchBoard.addhelpCount();
// 이미 status가 수락된 게시물이면 익셉션 출력
} else if (matchBoard.status.equals("수락된 게시물")) {
throw new MatchException.AlreadyApplyMatchException();
// 이미 status가 거질 된 게시물이면 익셉션 출력
} else if(matchBoard.status.equals("거절된 게시물")) {
throw new MatchException();
거절기능도 수락기능과 거의 비슷하게 만들었다.
matchBoard.status가 "모집중" 이면 matchBoard.downStatus() 메소드를 사용해서 "거절 완료"로 바뀌도록 만들었고,
else if 문을 사용해 만약 matchBoard.status가 "거절 완료" 이면 익셉션을 출력하게 만들었고,
다시 else if 문을 사용해 matchBoard.status가 "수락된 게시물" 이면 익셉션을 출력하게 만들었다.
// 심부름 거절 기능 추가
// 거절 기능
@Override
public ResponseEntity downStatus(Long boardId, Long matchboardId) {
Board board = boardRepository.findById(boardId).orElseThrow(
BoardException.BoardNotFoundException::new
);
MatchBoard matchBoard = matchBoardRepository.findById(matchboardId).orElseThrow(
MatchException.MatchNotFoundException::new
);
// status가 모집중이면 거절된 게시물로 변경
if (matchBoard.status.equals("모집중")) {
matchBoard.downStatus();
// status가 거절 완료인 상태면 익셉션 출력
} else if (matchBoard.status.equals("거절 완료")) {
throw new MatchException();
// status가 수락된 게시물 상태이면 익셉션 출력
} else if (matchBoard.status.equals("수락된 게시물")) {
throw new MatchException.AlreadyApplyMatchException();
}
그 후 페이징 처리를 한 MatchBoard 전체 조회 기능을 만들었다. 근데 막상 실행해보니 오류가 나와서 일단 수정은 했는데
내일 postman으로 실행을 해서 오류 없이 기능 구현이 되나 확인해봐야겠다.
팀원분이 한번 실행을 해봤는데 실행을 하니 바로 오류가 나와서 오류를 보니 이런 오류가 한무더기로 나와서 팀원들이랑 같이
오류를 고쳐봤다.
UnsatisfiedDependencyException: Error creating bean with name 'securityConfig' defined in file
[C:\Users\taewoong\Desktop\ZIPSA-HELPERPJT\build\classes\java\main\com\sparta\zipsa\config\SecurityConfig.class]:
Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil' defined in file
처음에는 스프링 시큐리티 문제인 줄 알고 저번에 만든 팀 프로젝트 시큐리티 부분을 보면서 수정해봤는데 고쳐지지가 않아서
끙끙 앓던 중 팀원분이 오류를 해결했다. 스프링 시큐리티 오류인 줄 알았는데 알고보니 UserRepository 문제였다.
오류가 되게 많았는데 몇몇줄은 user, userRoleEnum 등등이 적혀있어서 찾아내셨다고 한다.
Caused by: org.springframework.data.mapping.PropertyReferenceException:
No property 'userRoleEnum' found for type 'User'
오류가 일어난 이유는 UserRepository에 Page<User> 변수 이름이 findByUserRoleEnum으로 되있는데,
변수 이름이 UserRoleEnum이라서 의존성 주입을 하지 못하고 오류가 났었던 것 같다.
Page<User> findByUserRoleEnum(UserRoleEnum role, Pageable pagable);
그래서 findByRole로 변경해주었다.
Page<User> findByRole(UserRoleEnum role, Pageable pageable);
그리고 내가 만든 MatchBoardRepository에 변수 이름도 문제가 있었다.
MatchBoard를 변수로 받는 List에 이름을 findAllByMatchBoard로 이름을 지었는데, 이것도 변수 이름이 이상해서
의존성 주입을 하지 못하고 오류가 났던 것 같다.
List<MatchBoard> findAllByMatchBoard();
두개 이름을 고치고 실행해보니 실행이 잘 되었다!
알게 된 점은 이름을 이쁘게 쓰자..
내일 목표: 내가 맡은 부분 오류 수정하기, postman에서 오류없이 기능 구현 완료하기, 프로젝트 마무리짓기!