Skip to content

Commit c69f638

Browse files
fix: 스토리지 객체 유무 확인 로직 추가
1 parent 03ab0f9 commit c69f638

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

layer-api/src/main/java/org/layer/domain/space/service/SpaceService.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.extern.slf4j.Slf4j;
66
import org.layer.common.dto.Meta;
77
import org.layer.domain.actionItem.repository.ActionItemRepository;
8+
import org.layer.domain.external.ncp.service.NcpService;
89
import org.layer.domain.retrospect.repository.RetrospectRepository;
910
import org.layer.domain.space.controller.dto.SpaceRequest;
1011
import org.layer.domain.space.controller.dto.SpaceResponse;
@@ -31,6 +32,7 @@
3132
@Slf4j
3233
@Transactional(readOnly = true)
3334
public class SpaceService {
35+
private final NcpService ncpService;
3436
private final SpaceRepository spaceRepository;
3537
private final MemberSpaceRelationRepository memberSpaceRelationRepository;
3638
private final ActionItemRepository actionItemRepository;
@@ -55,8 +57,9 @@ public SpaceResponse.SpacePage getSpaceListFromMemberId(Long memberId, SpaceRequ
5557

5658
@Transactional
5759
public Long createSpace(Long memberId, SpaceRequest.CreateSpaceRequest createSpaceRequest) {
58-
59-
60+
if (createSpaceRequest.bannerUrl() != null) {
61+
ncpService.checkObjectExistOrThrow(createSpaceRequest.bannerUrl());
62+
}
6063
var newSpace = spaceRepository.save(createSpaceRequest.toEntity(memberId));
6164
var memberSpaceRelation = MemberSpaceRelation.builder().memberId(memberId).space(newSpace).build();
6265

layer-external/src/main/java/org/layer/domain/external/ncp/service/NcpService.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99
import lombok.extern.slf4j.Slf4j;
1010
import org.layer.domain.external.ncp.dto.NcpResponse;
1111
import org.layer.domain.external.ncp.enums.ImageDomain;
12+
import org.layer.domain.external.ncp.exception.ExternalException;
1213
import org.springframework.beans.factory.annotation.Value;
1314
import org.springframework.stereotype.Service;
1415

1516
import java.util.Date;
1617
import java.util.UUID;
1718

19+
import static org.layer.common.exception.ExternalExceptionType.OBJECT_INVALID_ERROR;
20+
1821
@Service
1922
@Slf4j
2023
@RequiredArgsConstructor
@@ -37,6 +40,15 @@ public NcpResponse.PresignedResult getPreSignedUrl(Long memberId, ImageDomain im
3740
);
3841
}
3942

43+
public void checkObjectExistOrThrow(String url) {
44+
45+
String objectKey = extractObjectKey(url);
46+
boolean isExist = amazonS3Client.doesObjectExist(bucket, objectKey);
47+
if (!isExist) {
48+
throw new ExternalException(OBJECT_INVALID_ERROR);
49+
}
50+
}
51+
4052
private GeneratePresignedUrlRequest getGeneratePreSignedUrlRequest(String fileName) {
4153
GeneratePresignedUrlRequest generatePresignedUrlRequest =
4254
new GeneratePresignedUrlRequest(bucket, fileName)
@@ -57,4 +69,13 @@ private Date getPreSignedUrlExpiration() {
5769
expiration.setTime(expTimeMillis);
5870
return expiration;
5971
}
72+
73+
private String extractObjectKey(String url) {
74+
String expectedPrefix = "https://layer-bucket.kr.object.ncloudstorage.com";
75+
76+
if (!url.startsWith(expectedPrefix)) {
77+
throw new ExternalException(OBJECT_INVALID_ERROR);
78+
}
79+
return url.substring(expectedPrefix.length() + 1); // "/" 이후부터 추출
80+
}
6081
}

0 commit comments

Comments
 (0)