반응형
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;
}
...
}
'Study > SpringBoot' 카테고리의 다른 글
[Springboot] 팔로우 정보 모달에 노출하기1 - dto 및 컨트롤러 설정 (0) | 2022.05.24 |
---|---|
[Springboot] 팔로우(언팔로우)기능 - 2 팔로우 언팔로우 기능 구현 (0) | 2022.05.24 |
[Springboot] 이미지 업로드 - 2 유효성 검사 및 양방향 매칭 설정 (0) | 2022.05.22 |
[Springboot] 이미지 업로드 - 1 이미지 저장(로컬 및 DB) (0) | 2022.05.21 |
[Springboot] user follow 설정 (0) | 2022.05.20 |