반응형

UserProfileDto

followState: 팔로우를 한 상태인지
followCount: 팔로우수

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class UserProfileDto {
    private boolean pageOwnerState;
    private int imageCount;
    private boolean followState;
    private int followCount;
    private User user;

}

 

FollowRepositoy

- select 문이기 때문에 @Modifying 어노테이션 필요 없음
- mFollowState:
로그인한 유저가 현재 접근한 페이지의 유저를 팔로우 했는지 여부를 구하는 쿼리다.
로그인한 계정id(principalId) 와 현재 접속한 페이지의 유저아이디(pageUserId)를 매개변수로 받는다.
- mFollowCount:
현재 접근한 페이지의 유저가 팔로우하는 수를 구하는 쿼리다. 
pageUserId를 매개변수로 받는다.

public interface FollowRepositoy extends JpaRepository<Follow,Integer>{

 ...
 
    //구독 여부(test1으로 로그인, test2 페이지로감 - 1번이 2번 팔로우 했는지 - 1나오면 구독한다는거 ), 1이면 팔로우한 상태
    @Query(value = "SELECT COUNT(*) FROM follow WHERE fromUserId = :principalId AND toUserId = :pageUserId", nativeQuery = true)
    int mFollowState(int principalId, int pageUserId);

    //해당 페이지의 유저가 팔로우 하는 수
    @Query(value = "SELECT COUNT(*) FROM follow WHERE fromUserId = :pageUserId", nativeQuery = true)
    int mFollowCount(int pageUserId);

}

 이 쿼리들은 UserController에서 "user/profile"로 갈때 쿼리로 얻어진 정보를 UserProfileDto에 담아서 가져갈거다. 

 

UserService

- FollowRepository 를 DI해서 가져온다. 
- 로그인한 유저의 페이지 주인 팔로우 여부(followState)와 페이지 주인의 팔로우 수(followCount)를 구해서
  dto에 담는다. 
- followState가 1이면 true, 아니면 false가 담겨진다.

@RequiredArgsConstructor
@Service
public class UserService {

    private final UserRepository userRepository;
    private final FollowRepositoy followRepositoy;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    @Transactional(readOnly = true)
    public UserProfileDto userProfile(int pageUserId, int principalId){

        UserProfileDto dto = new UserProfileDto();

        //SELECT * FROM image WHERE USERiD = :userId;
        User userEntity = userRepository.findById(pageUserId).orElseThrow(() -> {
            throw new CustomException("해당 프로필 페이지는 없는 페이지입니다.");
        }); 

        dto.setUser(userEntity);
        //pageUserId 와 principalId가 같은지 비교
        dto.setPageOwnerState(pageUserId == principalId);
        dto.setImageCount(userEntity.getImages().size());

        int followState = followRepositoy.mFollowState(principalId, pageUserId);
        int followCount = followRepositoy.mFollowCount(pageUserId);

        dto.setFollowState(followState == 1);
        dto.setFollowCount(followCount);

        return dto;
    }
    
    ...

}

+ Recent posts