개발일지/2023_한이음

[개발] [spring boot] 좋아요 기능 개수 제한하기_성공

기억지기 개발자 2023. 6. 30. 15:47

🤔전 상황 / 원인분석

전전 글에서 좋아요 개수 제한하기에 성공했다고 했었는데 계속 다양한 경우의 수로 테스트를 해보니 중간에 제대로 List에 add가 안 되거나, 개수가 자기 마음대로 나오는 등 그 코드는 실패한 코드였다. 

애초에 DB에 저장하는 게 아니라 그냥 로컬(?)에만 담겨있는 favoriteSchool 변수에 무결성을 유지하면서 잘 작동할 수 있는지도 미지수긴 하다.

User entity의 필드

🌸해결과정

생각해 보니 반드시 저 정보들은 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("해당 학교는 이미 찜한 학교입니다.");
        }

이렇게 진행하니 중간에 오류도 없이 제대로 성공~~ 전보다 코드도 더 깔끔!!