Skip to content

Commit

Permalink
[DDING-9] Banner 도메인 파일 업로드 로직 수정 (#194)
Browse files Browse the repository at this point in the history
  • Loading branch information
5uhwann authored Dec 4, 2024
1 parent 10c30a6 commit 1c8f104
Show file tree
Hide file tree
Showing 24 changed files with 314 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import ddingdong.ddingdongBE.domain.banner.service.FacadeUserBannerService;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,26 @@
import ddingdong.ddingdongBE.domain.user.entity.User;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.URL;

@Schema(
name = "CreateBannerRequest",
description = "어드민 - 배너 생성 요청"
)
public record CreateBannerRequest(
@Schema(description = "웹 이미지 key", example = "local/file/2024-01-01/ddingdong/uuid")
@NotNull(message = "webImageKey는 필수입니다.")
String webImageKey,
@Schema(description = "모바일 이미지 key", example = "local/file/2024-01-01/ddingdong/uuid")
@NotNull(message = "mobileImageKey 필수입니다.")
String mobileImageKey
@Schema(description = "연결 링크", example = "https://test-link.com")
@URL
String link,
@Schema(description = "웹 이미지 식별자", example = "0192c828-ffce-7ee8-94a8-d9d4c8cdec00")
@NotNull(message = "webImageId는 필수입니다.")
String webImageId,
@Schema(description = "모바일 이미지 식별자", example = "0192c828-ffce-7ee8-94a8-d9d4c8cdec00")
@NotNull(message = "mobileImageId 필수입니다.")
String mobileImageId
) {

public CreateBannerCommand toCommand(User user) {
return new CreateBannerCommand(user, webImageKey, mobileImageKey);
return new CreateBannerCommand(user, link, webImageId, mobileImageId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
public record AdminBannerListResponse(
@Schema(description = "배너 식별자", example = "1")
Long id,
@Schema(description = "연결 링크", example = "https://test.com")
String link,
AdminBannerListImageUrlResponse webImageUrl,
AdminBannerListImageUrlResponse mobileImageUrl
) {

public static AdminBannerListResponse from(AdminBannerListQuery query) {
return new AdminBannerListResponse(
query.id(),
query.link(),
AdminBannerListImageUrlResponse.from(query.webImageUrlQuery()),
AdminBannerListImageUrlResponse.from(query.mobileImageUrlQuery())
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
public record UserBannerListResponse(
@Schema(description = "배너 식별자", example = "1")
Long id,
@Schema(description = "연결 링크", example = "https://test.com")
String link,
UserBannerListImageUrlResponse webImageUrl,
UserBannerListImageUrlResponse mobileImageUrl
) {

public static UserBannerListResponse from(UserBannerListQuery query) {
return new UserBannerListResponse(
query.id(),
query.link(),
UserBannerListImageUrlResponse.from(query.webImageUrlQuery()),
UserBannerListImageUrlResponse.from(query.mobileImageUrlQuery())
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,16 @@ public class Banner extends BaseEntity {
@JoinColumn(name = "user_id")
private User user;

private String webImageKey;

private String mobileImageKey;
private String link;

@Column(name = "deleted_at", columnDefinition = "TIMESTAMP")
private LocalDateTime deletedAt;

@Builder
private Banner(Long id, User user, String webImageKey, String mobileImageKey) {
private Banner(Long id, User user, String link) {
this.id = id;
this.user = user;
this.webImageKey = webImageKey;
this.mobileImageKey = mobileImageKey;
this.link = link;
}

public void update(Banner banner) {
this.webImageKey = banner.getWebImageKey();
this.mobileImageKey = banner.getMobileImageKey();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ddingdong.ddingdongBE.domain.banner.repository.dto;

import ddingdong.ddingdongBE.domain.banner.entity.Banner;
import ddingdong.ddingdongBE.domain.filemetadata.entity.FileMetaData;
import java.util.List;

public record BannerWithFileMetaDataDto(
Banner banner,
List<FileMetaData> fileMetaDataList
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ public interface BannerService {

List<Banner> findAll();

void update(Long bannerId, Banner updatedBanner);

void delete(Long bannerId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@
import ddingdong.ddingdongBE.domain.banner.entity.Banner;
import ddingdong.ddingdongBE.domain.banner.service.dto.command.CreateBannerCommand;
import ddingdong.ddingdongBE.domain.banner.service.dto.query.AdminBannerListQuery;
import ddingdong.ddingdongBE.domain.filemetadata.entity.DomainType;
import ddingdong.ddingdongBE.domain.filemetadata.entity.FileMetaData;
import ddingdong.ddingdongBE.domain.filemetadata.service.FileMetaDataService;
import ddingdong.ddingdongBE.file.service.S3FileService;
import ddingdong.ddingdongBE.file.service.dto.query.UploadedFileUrlQuery;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -22,31 +28,50 @@ public class FacadeAdminBannerServiceImpl implements FacadeAdminBannerService {
@Override
@Transactional
public Long create(CreateBannerCommand command) {
// fileMetaDataService.save(List.of(
// FileMetaData.of(command.webImageKey(), BANNER_WEB_IMAGE),
// FileMetaData.of(command.mobileImageKey(), BANNER_MOBILE_IMAGE)
// )
// );
return bannerService.save(command.toEntity());
Long savedBannerId = bannerService.save(command.toEntity());
fileMetaDataService.updateStatusToCoupled(command.webImageId(), DomainType.BANNER_WEB_IMAGE, savedBannerId);
fileMetaDataService.updateStatusToCoupled(
command.mobileImageId(), DomainType.BANNER_MOBILE_IMAGE, savedBannerId);
return savedBannerId;
}

@Override
public List<AdminBannerListQuery> findAll() {
List<Banner> banners = bannerService.findAll();
if (banners.isEmpty()) {
return Collections.emptyList();
}
List<FileMetaData> bannerImages = fileMetaDataService.getCoupledAllByEntityIds(
banners.stream().map(Banner::getId).toList());
return banners.stream()
.map(banner -> AdminBannerListQuery.of(
banner,
s3FileService.getUploadedFileUrl(banner.getWebImageKey()),
s3FileService.getUploadedFileUrl(banner.getMobileImageKey())
)
)
.map(banner -> createBannerListQuery(banner, bannerImages))
.toList();
}

@Override
@Transactional
public void delete(Long bannerId) {
bannerService.delete(bannerId);
fileMetaDataService.updateStatusToDelete(DomainType.BANNER_WEB_IMAGE, bannerId);
fileMetaDataService.updateStatusToDelete(DomainType.BANNER_MOBILE_IMAGE, bannerId);
}

private AdminBannerListQuery createBannerListQuery(Banner banner, List<FileMetaData> bannerImages) {
Map<DomainType, FileMetaData> fileMetaDataMap = bannerImages.stream()
.filter(fileMetaData -> fileMetaData.isOwn(banner.getId()))
.collect(Collectors.toMap(
FileMetaData::getDomainType,
fileMetaData -> fileMetaData,
(existing, replacement) -> existing
));

UploadedFileUrlQuery webImageUrlQuery = s3FileService.getUploadedFileUrl(
fileMetaDataMap.get(DomainType.BANNER_WEB_IMAGE).getFileKey()
);
UploadedFileUrlQuery mobileImageUrlQuery = s3FileService.getUploadedFileUrl(
fileMetaDataMap.get(DomainType.BANNER_MOBILE_IMAGE).getFileKey()
);
return AdminBannerListQuery.of(banner, webImageUrlQuery, mobileImageUrlQuery);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@

import ddingdong.ddingdongBE.domain.banner.entity.Banner;
import ddingdong.ddingdongBE.domain.banner.service.dto.query.UserBannerListQuery;
import ddingdong.ddingdongBE.domain.filemetadata.entity.DomainType;
import ddingdong.ddingdongBE.domain.filemetadata.entity.FileMetaData;
import ddingdong.ddingdongBE.domain.filemetadata.service.FileMetaDataService;
import ddingdong.ddingdongBE.file.service.S3FileService;
import ddingdong.ddingdongBE.file.service.dto.query.UploadedFileUrlQuery;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -14,18 +21,45 @@
public class FacadeUserBannerServiceImpl implements FacadeUserBannerService {

private final BannerService bannerService;
private final FileMetaDataService fileMetaDataService;
private final S3FileService s3FileService;

@Override
public List<UserBannerListQuery> findAll() {
List<Banner> banners = bannerService.findAll();
if (banners.isEmpty()) {
return Collections.emptyList();
}

List<FileMetaData> bannerImages = fileMetaDataService.getCoupledAllByEntityIds(
banners.stream()
.map(Banner::getId)
.toList()
);

return banners.stream()
.map(banner -> UserBannerListQuery.of(
banner,
s3FileService.getUploadedFileUrl(banner.getWebImageKey()),
s3FileService.getUploadedFileUrl(banner.getMobileImageKey())
)
)
.map(banner -> createBannerListQuery(banner, bannerImages))
.toList();
}

private UserBannerListQuery createBannerListQuery(Banner banner, List<FileMetaData> bannerImages) {
if (bannerImages.isEmpty()) {
return UserBannerListQuery.of(banner, null, null);
}
Map<DomainType, FileMetaData> fileMetaDataMap = bannerImages.stream()
.filter(fileMetaData -> fileMetaData.getEntityId().equals(banner.getId()))
.collect(Collectors.toMap(
FileMetaData::getDomainType,
fileMetaData -> fileMetaData,
(existing, replacement) -> existing
));

UploadedFileUrlQuery webImageUrlQuery = s3FileService.getUploadedFileUrl(
fileMetaDataMap.get(DomainType.BANNER_WEB_IMAGE).getFileKey()
);
UploadedFileUrlQuery mobileImageUrlQuery = s3FileService.getUploadedFileUrl(
fileMetaDataMap.get(DomainType.BANNER_MOBILE_IMAGE).getFileKey()
);
return UserBannerListQuery.of(banner, webImageUrlQuery, mobileImageUrlQuery);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ public List<Banner> findAll() {
return bannerRepository.findAllByOrderByIdDesc();
}

@Override
@Transactional
public void update(Long bannerId, Banner updatedBanner) {
Banner banner = getBanner(bannerId);
banner.update(updatedBanner);
}

@Override
@Transactional
public void delete(Long bannerId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

public record CreateBannerCommand(
User user,
String webImageKey,
String mobileImageKey
String link,
String webImageId,
String mobileImageId
) {

public Banner toEntity() {
return Banner.builder()
.user(user)
.webImageKey(webImageKey)
.mobileImageKey(mobileImageKey)
.link(link)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@

public record AdminBannerListQuery(
Long id,
String link,
UploadedFileUrlQuery webImageUrlQuery,
UploadedFileUrlQuery mobileImageUrlQuery
) {

public static AdminBannerListQuery of(
Banner banner, UploadedFileUrlQuery webImageUrlQuery,
Banner banner,
UploadedFileUrlQuery webImageUrlQuery,
UploadedFileUrlQuery mobileImageUrlQuery
) {
return new AdminBannerListQuery(banner.getId(), webImageUrlQuery, mobileImageUrlQuery);
return new AdminBannerListQuery(banner.getId(), banner.getLink(), webImageUrlQuery, mobileImageUrlQuery);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

public record UserBannerListQuery(
Long id,
String link,
UploadedFileUrlQuery webImageUrlQuery,
UploadedFileUrlQuery mobileImageUrlQuery
) {
Expand All @@ -14,7 +15,7 @@ public static UserBannerListQuery of(
UploadedFileUrlQuery webImageUrlQuery,
UploadedFileUrlQuery mobileImageUrlQuery
) {
return new UserBannerListQuery(banner.getId(), webImageUrlQuery, mobileImageUrlQuery);
return new UserBannerListQuery(banner.getId(), banner.getLink(), webImageUrlQuery, mobileImageUrlQuery);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@ public enum DomainType {
NOTICE_IMAGE,
NOTICE_FILE,
DOCUMENT_FILE,
ACTIVITY_REPORT_IMAGE
ACTIVITY_REPORT_IMAGE,
BANNER_WEB_IMAGE,
BANNER_MOBILE_IMAGE,
}

This file was deleted.

Loading

0 comments on commit 1c8f104

Please sign in to comment.