Skip to content

Commit 9ff9454

Browse files
authored
Merge pull request #123 from SeeATheater/fix/PhotoAlbumGetUrl
[FIX] 사진첩 결과 dto에 이미지를 presignedUrl로 제공
2 parents 94b74f6 + 8bce9ad commit 9ff9454

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

src/main/java/cc/backend/image/entity/Image.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class Image {
3232
// S3 객체 키 (예: "board/1.png") - 삭제나 조회 시 필요(객체 url에서 버킷 url 뺀 나머지 = filepath + 파일이름)
3333
private String keyName;
3434

35-
// 외부에 공개할 수 있는 URL (예: https://bucket.s3.region.amazonaws.com/board/1.png)
35+
// 정적인 컨텐츠 전용 URL (poster, notice, actor 이미지 전용)
3636
private String imageUrl;
3737

3838
// 버킷 내 디렉토리 경로 (board, photoAlbum)

src/main/java/cc/backend/image/service/ImageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public ImageResponseDTO.ImageResultWithPresignedUrlDTO getPosterImage(String key
127127

128128

129129
public List<ImageResponseDTO.ImageResultWithPresignedUrlDTO> getImages(List<Image> images, Long memberId) {
130-
130+
//로그인 검사
131131
memberRepository.findById(memberId)
132132
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_AUTHORIZED));
133133

src/main/java/cc/backend/photoAlbum/controller/PhotoAlbumController.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,18 @@ public ApiResponse<PhotoAlbumResponseDTO.PhotoAlbumResultDTO> updatePhotoAlbum(
6969
@Operation(summary = "사진첩 삭제 API", description = "공연별 사진첩을 삭제하는 API 입니다.")
7070
public ApiResponse<String> deletePhotoAlbum(
7171
@PathVariable("photoAlbumId") Long photoAlbumId,
72-
@AuthenticationPrincipal(expression = "member") Member member) {
72+
@AuthenticationPrincipal(expression = "member") Member member
73+
) {
7374
return ApiResponse.onSuccess(photoAlbumService.deletePhotoAlbum(photoAlbumId, member.getId()));
7475
}
7576

7677
@GetMapping("")
7778
@Operation(summary = "메뉴에서 전체 사진첩 조회 API", description = "최근 올라온 사진첩을 전체 조회하는 API 입니다.")
7879
public ApiResponse<PhotoAlbumResponseDTO.ScrollMemberPhotoAlbumDTO> getAllPhotoAlbum(
7980
@RequestParam(defaultValue = "0") int page,
80-
@RequestParam(defaultValue = "10") int size) {
81-
return ApiResponse.onSuccess(photoAlbumService.getAllRecentPhotoAlbumList(page, size));
81+
@RequestParam(defaultValue = "10") int size,
82+
@AuthenticationPrincipal(expression = "member") Member member) {
83+
return ApiResponse.onSuccess(photoAlbumService.getAllRecentPhotoAlbumList(member.getId(), page, size));
8284
}
8385

8486
@GetMapping("/member/{memberId}/shows")

src/main/java/cc/backend/photoAlbum/service/PhotoAlbumService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ public interface PhotoAlbumService {
1616
public PhotoAlbumResponseDTO.PerformerPhotoAlbumDTO getPhotoAlbumList(Long memberId, Long performerId, int page, int size);
1717
public PhotoAlbumResponseDTO.PhotoAlbumResultDTO updatePhotoAlbum(Long photoAlbumId, PhotoAlbumRequestDTO.CreatePhotoAlbumDTO requestDTO, Long memberId);
1818
public String deletePhotoAlbum(Long photoAlbumId, Long memberId);
19-
public PhotoAlbumResponseDTO.ScrollMemberPhotoAlbumDTO getAllRecentPhotoAlbumList(int page, int size);
19+
public PhotoAlbumResponseDTO.ScrollMemberPhotoAlbumDTO getAllRecentPhotoAlbumList(Long memberId, int page, int size);
2020
public PerformerShowListResponseDTO getPerformerShows(Long memberId, Pageable pageable);
2121
}

src/main/java/cc/backend/photoAlbum/service/PhotoAlbumServiceImpl.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -281,32 +281,40 @@ public String deletePhotoAlbum(Long photoAlbumId, Long memberId) {
281281
}
282282

283283
@Override
284-
public PhotoAlbumResponseDTO.ScrollMemberPhotoAlbumDTO getAllRecentPhotoAlbumList(int page, int size){
284+
public PhotoAlbumResponseDTO.ScrollMemberPhotoAlbumDTO getAllRecentPhotoAlbumList(Long memberId, int page, int size){
285+
286+
//로그인 검사
287+
memberRepository.findById(memberId)
288+
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_AUTHORIZED));
285289

286290
// 최근 생성한 순서대로 photoAlbum 가져오기
287291
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
288-
Page<PhotoAlbum> albumPage = photoAlbumRepository.findAll(pageable); // 또는 커스텀 쿼리 사용 가능
292+
Page<PhotoAlbum> albumPage = photoAlbumRepository.findAll(pageable);
289293
List<PhotoAlbum> albums = albumPage.getContent(); //Page 벗기기
290294

291-
// 3. N+1 방지: 대표 이미지 조회
295+
// N+1 방지: 대표 이미지 조회
292296
List<Long> albumIds = albums.stream()
293297
.map(PhotoAlbum::getId)
294298
.toList();
295299

296-
Map<Long, Image> albumImageMap = imageRepository.findFirstByContentIds(albumIds, FilePath.photoAlbum)
297-
.stream()
298-
.collect(Collectors.toMap(Image::getContentId, Function.identity()));
300+
List<Image> images = imageRepository.findFirstByContentIds(albumIds, FilePath.photoAlbum);
299301

302+
// 1. images 전체를 한 번에 imageService에 넘김 -> 사진첩 개수만큼의 presignedUrl 발급을 한번에
303+
List<ImageResponseDTO.ImageResultWithPresignedUrlDTO> imageDTOs = imageService.getImages(images, memberId);
304+
305+
// 2. DTO를 contentId 기준으로 Map으로 변환 -> 각 사진첩 dto에 발급받은 url 뿌려줌
306+
Map<Long, ImageResponseDTO.ImageResultWithPresignedUrlDTO> albumImageMap = imageDTOs.stream()
307+
.collect(Collectors.toMap(ImageResponseDTO.ImageResultWithPresignedUrlDTO::getContentId, Function.identity()));
300308
//DTO 변환
301309
List<PhotoAlbumResponseDTO.MemberPhotoAlbumDTO> dtoList = albums.stream()
302310
.map(album -> {
303-
Image coverImage = albumImageMap.get(album.getId());
311+
ImageResponseDTO.ImageResultWithPresignedUrlDTO coverImageDTO = albumImageMap.get(album.getId());
304312
return PhotoAlbumResponseDTO.MemberPhotoAlbumDTO.builder()
305313
.photoAlbumId(album.getId())
306314
.memberId(album.getAmateurShow().getMember().getId())
307315
.performerName(album.getAmateurShow().getMember().getName())
308316
.amateurShowName(album.getAmateurShow().getName())
309-
.imageUrl(coverImage != null ? coverImage.getImageUrl() : null)
317+
.imageUrl(coverImageDTO != null ? coverImageDTO.getPresignedUrl() : null)
310318
.build();
311319
})
312320
.toList();

0 commit comments

Comments
 (0)