Skip to content

Commit 6240692

Browse files
committed
Follow 조회 시 유저의 사진을 presigned image 조회 로직 추가
1 parent 2a56468 commit 6240692

File tree

2 files changed

+65
-53
lines changed

2 files changed

+65
-53
lines changed

closet-api/src/main/java/project/closet/dto/response/FollowDto.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ public record FollowDto(
99
UserSummary follower
1010
) {
1111

12-
public static FollowDto from(Follow follow) {
12+
public static FollowDto fromWithImageUrl(Follow follow, String followeeImage, String followerImage) {
1313
return new FollowDto(
14-
follow.getId(),
15-
new UserSummary(
16-
follow.getFollowee().getId(),
17-
follow.getFollowee().getName(),
18-
follow.getFollowee().getProfile().getProfileImageKey()
14+
follow.getId(),
15+
new UserSummary(
16+
follow.getFollowee().getId(),
17+
follow.getFollowee().getName(),
18+
followeeImage
1919
),
20-
new UserSummary(
21-
follow.getFollower().getId(),
22-
follow.getFollower().getName(),
23-
follow.getFollower().getProfile().getProfileImageKey()
24-
)
20+
new UserSummary(
21+
follow.getFollower().getId(),
22+
follow.getFollower().getName(),
23+
followerImage
24+
)
2525
);
2626
}
2727
}

closet-api/src/main/java/project/closet/follower/service/basic/BasicFollowService.java

Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import project.closet.follower.entity.Follow;
2020
import project.closet.follower.repository.FollowRepository;
2121
import project.closet.follower.service.FollowService;
22+
import project.closet.storage.S3ContentStorage;
2223
import project.closet.user.entity.User;
2324
import project.closet.user.repository.UserRepository;
2425

@@ -30,6 +31,7 @@ public class BasicFollowService implements FollowService {
3031
private final FollowRepository followRepository;
3132
private final UserRepository userRepository;
3233
private final ApplicationEventPublisher eventPublisher;
34+
private final S3ContentStorage s3ContentStorage;
3335

3436
@Transactional
3537
@Override
@@ -38,64 +40,62 @@ public FollowDto createFollow(FollowCreateRequest followCreateRequest) {
3840
// TODO 중복 검사 로직 추가 or 데이터베이스 제약조건 추가
3941
UUID followerId = followCreateRequest.followerId();
4042
User follower = userRepository.findByIdWithProfile(followerId)
41-
.orElseThrow(() -> UserNotFoundException.withId(followerId));
43+
.orElseThrow(() -> UserNotFoundException.withId(followerId));
4244

4345
UUID followeeId = followCreateRequest.followeeId();
4446
User followee = userRepository.findByIdWithProfile(followeeId)
45-
.orElseThrow(() -> UserNotFoundException.withId(followeeId));
47+
.orElseThrow(() -> UserNotFoundException.withId(followeeId));
4648

4749
Follow follow = Follow.builder()
48-
.follower(follower)
49-
.followee(followee)
50-
.build();
50+
.follower(follower)
51+
.followee(followee)
52+
.build();
5153

5254
// 알림 생성 이벤트
5355
eventPublisher.publishEvent(new FollowCreateEvent(followeeId, follower.getName()));
54-
return FollowDto.from(followRepository.save(follow));
56+
return toFollowDto(followRepository.save(follow));
5557
}
5658

5759
@Transactional(readOnly = true)
5860
@Override
5961
public FollowSummaryDto getFollowSummary(UUID userId, UUID currentUserId) {
6062
log.debug("Getting follow summary for userId: {}, currentUserId: {}", userId,
61-
currentUserId);
63+
currentUserId);
6264

6365
long followerCount = followRepository.countByFolloweeId(userId);
6466
long followingCount = followRepository.countByFollowerId(userId);
6567

6668
Optional<Follow> myFollow = followRepository.findByFollowerIdAndFolloweeId(currentUserId,
67-
userId);
69+
userId);
6870
boolean followedByMe = myFollow.isPresent();
6971
UUID followedByMeId = myFollow.map(Follow::getId).orElse(null);
7072

7173
boolean followingMe = followRepository.existsByFollowerIdAndFolloweeId(userId, currentUserId);
7274

7375
return new FollowSummaryDto(
74-
userId,
75-
followerCount,
76-
followingCount,
77-
followedByMe,
78-
followedByMeId,
79-
followingMe
76+
userId,
77+
followerCount,
78+
followingCount,
79+
followedByMe,
80+
followedByMeId,
81+
followingMe
8082
);
8183
}
8284

8385
@Transactional(readOnly = true)
8486
@Override
8587
public FollowListResponse getFollowingList(UUID followerId, String cursor, UUID idAfter,
86-
int limit, String nameLike) {
88+
int limit, String nameLike) {
8789
List<Follow> follows = followRepository.findFollowingsWithCursor(
88-
followerId,
89-
cursor != null ? Instant.parse(cursor) : null,
90-
idAfter,
91-
nameLike,
92-
limit
90+
followerId,
91+
cursor != null ? Instant.parse(cursor) : null,
92+
idAfter,
93+
nameLike,
94+
limit
9395
);
9496
boolean hasNext = follows.size() > limit;
9597
List<Follow> pageItems = hasNext ? follows.subList(0, limit) : follows;
96-
List<FollowDto> followDtos = pageItems.stream()
97-
.map(FollowDto::from)
98-
.toList();
98+
List<FollowDto> followDtos = toFollowerDto(pageItems);
9999

100100
String nextCursor = null;
101101
UUID nextIdAfter = null;
@@ -107,31 +107,29 @@ public FollowListResponse getFollowingList(UUID followerId, String cursor, UUID
107107

108108
long totalCount = followRepository.countByFollowerId(followerId);
109109
return new FollowListResponse(
110-
followDtos,
111-
nextCursor,
112-
nextIdAfter,
113-
hasNext,
114-
totalCount,
115-
"createdAt",
116-
"DESCENDING"
110+
followDtos,
111+
nextCursor,
112+
nextIdAfter,
113+
hasNext,
114+
totalCount,
115+
"createdAt",
116+
"DESCENDING"
117117
);
118118
}
119119

120120
@Transactional(readOnly = true)
121121
@Override
122122
public FollowListResponse getFollowerList(UUID followeeId, String cursor, UUID idAfter,
123-
int limit, String nameLike) {
123+
int limit, String nameLike) {
124124
Instant parsedCursor = (cursor != null) ? Instant.parse(cursor) : null;
125125

126126
List<Follow> follows = followRepository.findFollowersWithCursor(
127-
followeeId, parsedCursor, idAfter, nameLike, limit);
127+
followeeId, parsedCursor, idAfter, nameLike, limit);
128128

129129
boolean hasNext = follows.size() > limit;
130130
List<Follow> pageItems = hasNext ? follows.subList(0, limit) : follows;
131131

132-
List<FollowDto> followDtos = pageItems.stream()
133-
.map(FollowDto::from)
134-
.toList();
132+
List<FollowDto> followDtos = toFollowerDto(pageItems);
135133

136134
String nextCursor = null;
137135
UUID nextIdAfter = null;
@@ -144,16 +142,30 @@ public FollowListResponse getFollowerList(UUID followeeId, String cursor, UUID i
144142
long totalCount = followRepository.countByFolloweeId(followeeId);
145143

146144
return new FollowListResponse(
147-
followDtos,
148-
nextCursor,
149-
nextIdAfter,
150-
hasNext,
151-
totalCount,
152-
"createdAt",
153-
"DESC"
145+
followDtos,
146+
nextCursor,
147+
nextIdAfter,
148+
hasNext,
149+
totalCount,
150+
"createdAt",
151+
"DESC"
154152
);
155153
}
156154

155+
private FollowDto toFollowDto(Follow follow) {
156+
String followerImageUrl =
157+
s3ContentStorage.getPresignedUrl(follow.getFollower().getProfile().getProfileImageKey());
158+
String followeeImageUrl =
159+
s3ContentStorage.getPresignedUrl(follow.getFollowee().getProfile().getProfileImageKey());
160+
return FollowDto.fromWithImageUrl(follow, followeeImageUrl, followerImageUrl);
161+
}
162+
163+
private List<FollowDto> toFollowerDto(List<Follow> followList) {
164+
return followList.stream()
165+
.map(this::toFollowDto)
166+
.toList();
167+
}
168+
157169
@Transactional
158170
@Override
159171
public void cancelFollowById(UUID followId) {

0 commit comments

Comments
 (0)