🤔전 상황 / 원인분석
전전 글에서 좋아요 개수 제한하기에 성공했다고 했었는데 계속 다양한 경우의 수로 테스트를 해보니 중간에 제대로 List에 add가 안 되거나, 개수가 자기 마음대로 나오는 등 그 코드는 실패한 코드였다.
애초에 DB에 저장하는 게 아니라 그냥 로컬(?)에만 담겨있는 favoriteSchool 변수에 무결성을 유지하면서 잘 작동할 수 있는지도 미지수긴 하다.
🌸해결과정
생각해 보니 반드시 저 정보들은 DB에 있어야 언제든지 변경과 불러오기가 가능할 거 같았다.
개수를 제한하는 것도 그냥 테이블에 있는 유저 id를 조회해서 하나의 유저가 10 이상의 레코드를 가지지 못하게 개수를 세면 될 거 같았다.
🗝️해결
@PostMapping
public ResponseDTO<?> addHeart(HttpServletRequest request, @RequestParam Long schoolId){
User user = userService.getUser(request)
.orElseThrow(()->new IllegalArgumentException("유저 정보가 없습니다."));
Optional<School> school = schoolService.findBySchoolId(schoolId);
System.out.println("-------------"+user.getId()+"--------------");
// 중복 체크 (한번 찜한 학교는 다시 할 수 없음)
if (heartService.countByUserId(user.getId()) >= 10) {
throw new IllegalArgumentException("이미 10개 이상의 학교를 찜하였습니다.");
}
// 중복 체크 (한번 찜한 학교는 다시 할 수 없음)
if (!heartService.existsByUserIdAndSchoolId(user.getId(), schoolId)) {
Heart heart = Heart.builder()
.user(user)
.school(school.get())
.build();
return heartService.insert(heart);
} else {
throw new IllegalArgumentException("해당 학교는 이미 찜한 학교입니다.");
}
이렇게 진행하니 중간에 오류도 없이 제대로 성공~~ 전보다 코드도 더 깔끔!!
'개발일지 > 2023_한이음' 카테고리의 다른 글
[개발]🚨ERROR - java.lang.IllegalArgumentException: rawPassword cannot be null (0) | 2023.07.03 |
---|---|
[개발외] 현재 프로젝트 ERD 그리기 (0) | 2023.07.02 |
[개발] 🎁배운점 - Optional 클래스에서 getId() 사용하기 (0) | 2023.06.27 |
[개발] [spring boot] 좋아요 기능 개수 제한하기_실패 (0) | 2023.06.26 |
[개발]🚨ERROR - cannot find symbol(클래스) 에러 (0) | 2023.06.25 |