Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserRepository extends JpaRepository<User, Long> {

Optional<User> findByNickname(String username);

Optional<User> findByUuid(UUID uuid);

@Query("SELECT u FROM User u LEFT JOIN FETCH u.gardens WHERE u.id = :userId")
Optional<User> findByIdWithGardens(@Param("userId") Long userId);

Boolean existsByNickname(String nickname);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.example.cp_main_be.domain.member.user.presentation;

import com.example.cp_main_be.domain.garden.garden.domain.Garden;
import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.member.user.dto.request.AvatarChangeRequest;
Expand All @@ -14,9 +13,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.websocket.server.PathParam;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand Down Expand Up @@ -90,12 +87,8 @@ public ResponseEntity<ApiResponse<UserRegisterResponse.LevelStatusResponseDTO>>
@GetMapping("/me/gardens")
public ResponseEntity<ApiResponse<List<Long>>> getMyGardenIds(
@AuthenticationPrincipal User user) {
List<Long> gardenIds =
user.getGardens().stream()
.sorted(Comparator.comparing(Garden::getSlotNumber))
.map(Garden::getId)
.collect(Collectors.toList());

// 로직을 서비스 계층으로 위임하여 트랜잭션 내에서 처리하도록 변경
List<Long> gardenIds = userService.getMyGardenIds(user);
return ResponseEntity.ok(ApiResponse.success(gardenIds));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,26 @@ public User getCurrentUser() {
throw new IllegalArgumentException("인증 정보를 찾을 수 없습니다.");
}

/**
* 사용자의 모든 텃밭 ID 목록을 슬롯 번호 순으로 정렬하여 반환합니다.
*
* @param user 현재 로그인한 사용자
* @return 정렬된 텃밭 ID 목록
*/
@Transactional(readOnly = true)
public List<Long> getMyGardenIds(User user) {
// LazyInitializationException을 방지하기 위해 Fetch Join으로 User와 gardens를 함께 조회
User managedUser =
userRepository
.findByIdWithGardens(user.getId())
.orElseThrow(() -> new UserNotFoundException("사용자를 찾을 수 없습니다."));

return managedUser.getGardens().stream()
.sorted(Comparator.comparing(Garden::getSlotNumber))
.map(Garden::getId)
.collect(Collectors.toList());
}

/**
* 특정 유저의 프로필 정보를 조회합니다.
*
Expand Down