Skip to content

Commit

Permalink
[chore] 카페선택 pub/sub, post 카페유저리스트 loginId -> userId 로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeesw committed May 10, 2024
1 parent e06df9d commit ad64871
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
@Setter
public class CafeDto {
private String type; // add, delete
private String loginId;
private Long userId;
private String cafeId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@AllArgsConstructor
public class CafeSubDto {
private String type; // add, delete
private String loginId;
private Long userId;
private String cafeId;
private CafeUserDto cafeUserDto;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class CafeUserDto {
private String loginId;
private Long userId;
private String nickname;
private String company;
private String position;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@ public class CafePublisher {

public void updateCafeChoice(CafeDto dto) throws JsonProcessingException, IllegalArgumentException {
String type = dto.getType();
String loginId = dto.getLoginId();
Long userId = dto.getUserId();
String cafeId = dto.getCafeId();

switch (type) {
case "add":
cafeService.addCafeChoice(cafeId, loginId);
cafeService.addCafeChoice(cafeId, userId);
break;
case "delete":
cafeService.deleteCafeChoice(cafeId, loginId);
cafeService.deleteCafeChoice(cafeId, userId);
break;
default:
throw new IllegalArgumentException(
"updateCafeChoice : request type 형식을 (add/delete) 중 하나로 작성해주세요. 입력 type: '" + type + "'");
}
String cafeDtoJson = new ObjectMapper().writeValueAsString(dto);
// 해당 user의 전체 정보를 조회
CafeUserDto cafeUserDto = cafeService.getUserInfoFromDB(loginId);
CafeSubDto cafeSubDto = CafeSubDto.builder().type(type).loginId(loginId).cafeId(cafeId).cafeUserDto(cafeUserDto)
CafeUserDto cafeUserDto = cafeService.getUserInfoFromDB(userId);
CafeSubDto cafeSubDto = CafeSubDto.builder().type(type).userId(userId).cafeId(cafeId).cafeUserDto(cafeUserDto)
.build();
sendingOperations.convertAndSend("/sub/cafe/" + cafeId, cafeSubDto);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class CafeService {
private final UserService userService;

//redis에 add 하는 메소드
public void addCafeChoice(String cafeId, String loginId) {
public void addCafeChoice(String cafeId, Long userId) {
System.out.println("addCafeChoice() 진입");
/*
Redis에 아래 형식으로 저장됨
Expand All @@ -30,20 +30,22 @@ public void addCafeChoice(String cafeId, String loginId) {
value = set(user1, user2, user3)
*/
String cafeChoiceKey = "cafe:" + cafeId;
redisTemplate.opsForSet().add(cafeChoiceKey, loginId); // 카페 ID에 해당하는 세트에 사용자 ID 추가
String userIdStr = String.valueOf(userId); // Long 타입을 String으로 변환
redisTemplate.opsForSet().add(cafeChoiceKey, userIdStr); // 카페 ID에 해당하는 세트에 사용자 ID 추가
}

//redis에서 delete 하는 메소드
public void deleteCafeChoice(String cafeId, String loginId) {
public void deleteCafeChoice(String cafeId, Long userId) {
System.out.println("deleteCafeChoice() 진입");
final String cafeChoiceKey = "cafe:" + cafeId;

// 카페 ID에 해당하는 세트에서 사용자 ID 찾기
Boolean isMember = redisTemplate.opsForSet().isMember(cafeChoiceKey, loginId);
String userIdStr = String.valueOf(userId); // Long 타입을 String으로 변환
Boolean isMember = redisTemplate.opsForSet().isMember(cafeChoiceKey, userIdStr);
if (Boolean.TRUE.equals(isMember)) {
redisTemplate.opsForSet().remove(cafeChoiceKey, loginId);
redisTemplate.opsForSet().remove(cafeChoiceKey, userIdStr);
} else {
throw new IllegalArgumentException("User ID '" + loginId + "' 는 '" + cafeId + "' 카페에 속해 있지 않습니다.");
throw new IllegalArgumentException("User ID '" + userId + "' 는 '" + cafeId + "' 카페에 속해 있지 않습니다.");
}
}

Expand All @@ -55,7 +57,7 @@ public List<CafeUserDto> getUserProfilesFromRedisAndDB(String cafeId) {
// 각 userId로 DB에서 User entity, (Company entity, position entity) 를 조회
return Optional.ofNullable(userSet).orElse(Collections.emptySet()).stream()
.filter(Objects::nonNull) // null 값 제거
.map(userId -> getUserInfoFromDB((String) userId))
.map(user -> getUserInfoFromDB(Long.parseLong(user.toString()))) // String ID를 Long으로 안전하게 변환
.collect(Collectors.toList());
}

Expand All @@ -65,7 +67,7 @@ public Set<Object> getUserListFromRedis(String cafeId) {
return redisTemplate.opsForSet().members(cafeChoiceKey);
}

public CafeUserDto getUserInfoFromDB(String userId) {
public CafeUserDto getUserInfoFromDB(Long userId) {
return userService.getCafeUserInfoByLoginId(userId); // userId로 User entity 조회
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ public User getByUserId(Long userId) {
}

// 특정 카페에 접속한 사용자 list에 보일 User 데이터 조회
public CafeUserDto getCafeUserInfoByLoginId(String loginId) {
User user = userRepository.findByLoginId(loginId)
public CafeUserDto getCafeUserInfoByLoginId(Long userId) {
User user = userRepository.findByUserId(userId)
.orElseThrow(() -> {
log.info("id = {} 인 사용자가 존재하지 않습니다", loginId);
log.info("id = {} 인 사용자가 존재하지 않습니다", userId);
return new CustomException(ErrorCode.USER_NOT_FOUND);
});

return CafeUserDto.builder()
.loginId(user.getLoginId())
.userId(user.getUserId())
.nickname(user.getNickname())
.company(Optional.ofNullable(user.getCompany()).map(Company::getName).orElse("무소속"))
.position(user.getPosition().getName())
Expand Down

0 comments on commit ad64871

Please sign in to comment.