diff --git a/src/main/java/com/example/project/emotionCore/service/MemberService.java b/src/main/java/com/example/project/emotionCore/service/MemberService.java index 961fc2d..d9e5631 100644 --- a/src/main/java/com/example/project/emotionCore/service/MemberService.java +++ b/src/main/java/com/example/project/emotionCore/service/MemberService.java @@ -79,11 +79,22 @@ public boolean isAlreadyUsedName(String username){ //2 public JwtTokenDTO signUpWithSocial(String email, String username) { + String finalUsername = username; + if (memberRepository.existsByUsername(finalUsername)) { + Random random = new Random(); + do { + int randomNumber = random.nextInt(10000); // 0~9999 + finalUsername = username + randomNumber; + } while (memberRepository.existsByUsername(finalUsername)); + } + MemberDTO memberDTO = new MemberDTO(); memberDTO.setEmail(email); - memberDTO.setUsername(username); + memberDTO.setUsername(finalUsername); memberDTO.setPassword(""); // 소셜 로그인이라 비밀번호는 필요 없음 - memberRepository.save(MemberMapper.toEntity(memberDTO)); + Member savedMember = memberRepository.save(MemberMapper.toEntity(memberDTO)); + Author author = new Author(savedMember,"", "", new HashSet<>()); + authorRepository.save(author); return signInWithSocial(email); } @@ -100,12 +111,29 @@ public JwtTokenDTO naverLogin(String code, String state) { // DB에서 사용자 확인, 없으면 신규 생성 Member member = memberRepository.findByEmail(email) .orElseGet(() -> { + // 닉네임 중복 시 랜덤 숫자 붙이기 + String finalUsername = nickname; + if (memberRepository.existsByUsername(finalUsername)) { + Random random = new Random(); + do { + int randomNumber = random.nextInt(10000); // 0~9999 + finalUsername = nickname + randomNumber; + } while (memberRepository.existsByUsername(finalUsername)); + } + + // Member 저장 Member newMember = Member.builder() - .username(nickname) + .username(finalUsername) .email(email) .password("NaverLogin") // 비밀번호는 네이버 로그인의 경우 사용하지 않음 .build(); - return memberRepository.save(newMember); + Member savedMember = memberRepository.save(newMember); + + // Author 저장 (MapsId 매핑) + Author author = new Author(savedMember, "", "", new HashSet<>()); + authorRepository.save(author); + + return savedMember; }); diff --git a/src/main/java/com/example/project/emotionCore/service/NaverService.java b/src/main/java/com/example/project/emotionCore/service/NaverService.java index 785fbe8..664b40d 100644 --- a/src/main/java/com/example/project/emotionCore/service/NaverService.java +++ b/src/main/java/com/example/project/emotionCore/service/NaverService.java @@ -59,7 +59,6 @@ public String getAccessToken(String code, String state) { throw new RuntimeException("Failed to get access token from Naver"); } } - // 네이버 API에서 사용자 정보 가져오기 public Map getUserInfo(String accessToken) { String userInfoUrl = "https://openapi.naver.com/v1/nid/me"; @@ -76,4 +75,5 @@ public Map getUserInfo(String accessToken) { throw new RuntimeException("Failed to get user info from Naver"); } } + } diff --git a/src/main/java/com/example/project/emotionCore/service/SearchWorkService.java b/src/main/java/com/example/project/emotionCore/service/SearchWorkService.java index a720873..e45c967 100644 --- a/src/main/java/com/example/project/emotionCore/service/SearchWorkService.java +++ b/src/main/java/com/example/project/emotionCore/service/SearchWorkService.java @@ -20,15 +20,11 @@ public class SearchWorkService { @Transactional public void processSearch(String searchWord) { - // searchWord에 해당하는 엔티티를 검색 SearchWork searchWork = searchWorkRepository.findBySearchWord(searchWord) - .orElseGet(() -> { - // 없다면 새로 생성 - SearchWork newSearchWork = new SearchWork(searchWord); - return searchWorkRepository.save(newSearchWork); - }); - - // 검색 횟수 증가 + .orElse(null); + if (searchWork == null) { + searchWork = new SearchWork(searchWord); // count = 0 이어야 함 + } searchWork.incrementSearchCount(); searchWorkRepository.save(searchWork); }