Skip to content

Commit bff6df2

Browse files
Merge pull request #327 from Podo-Store/develop
feat: 대본 열람 api 생성
2 parents 47fdef6 + 7c457f7 commit bff6df2

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/main/java/PodoeMarket/podoemarket/product/controller/ProductController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,19 @@ public ResponseEntity<?> productLike(@AuthenticationPrincipal UserEntity userInf
115115
return ResponseEntity.badRequest().body(resDTO);
116116
}
117117
}
118+
119+
@GetMapping("/view")
120+
public ResponseEntity<StreamingResponseBody> scriptView(@RequestParam("script") UUID productId) {
121+
try{
122+
// 데이터베이스 작업 (트랜잭션 내에서 수행)
123+
final ProductEntity product = productService.getProduct(productId);
124+
final String s3Key = product.getFilePath();
125+
final String preSignedURL = s3Service.generatePreSignedURL(s3Key);
126+
127+
return productService.generateFullScriptDirect(preSignedURL);
128+
} catch(Exception e) {
129+
ResponseDTO resDTO = ResponseDTO.builder().error(e.getMessage()).build();
130+
return ResponseEntity.badRequest().body((StreamingResponseBody) resDTO);
131+
}
132+
}
118133
}

src/main/java/PodoeMarket/podoemarket/product/service/ProductService.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import PodoeMarket.podoemarket.product.dto.response.ScriptDetailResponseDTO;
1414
import PodoeMarket.podoemarket.product.dto.response.ScriptListResponseDTO;
1515
import PodoeMarket.podoemarket.product.type.SortType;
16-
import PodoeMarket.podoemarket.service.S3Service;
1716
import PodoeMarket.podoemarket.service.ViewCountService;
1817
import com.itextpdf.io.source.ByteArrayOutputStream;
1918
import com.itextpdf.kernel.pdf.PdfDocument;
@@ -36,7 +35,6 @@
3635
import java.io.ByteArrayInputStream;
3736
import java.io.IOException;
3837
import java.io.InputStream;
39-
import java.io.UnsupportedEncodingException;
4038
import java.net.URI;
4139
import java.net.URLEncoder;
4240
import java.nio.charset.StandardCharsets;
@@ -191,6 +189,26 @@ public String toggleLike(UserEntity userInfo, UUID productId) {
191189
}
192190
}
193191

192+
public ResponseEntity<StreamingResponseBody> generateFullScriptDirect(String preSignedURL) {
193+
StreamingResponseBody streamingResponseBody = outputStream -> {
194+
try (InputStream inputStream = new URI(preSignedURL).toURL().openStream()) {
195+
byte[] buffer = new byte[8192];
196+
int bytesRead;
197+
while ((bytesRead = inputStream.read(buffer)) != -1) {
198+
outputStream.write(buffer, 0, bytesRead);
199+
outputStream.flush();
200+
}
201+
} catch (Exception e) {
202+
log.error("PDF 스트리밍 중 오류 발생: {}", e.getMessage());
203+
}
204+
};
205+
206+
return ResponseEntity.ok()
207+
.contentType(MediaType.APPLICATION_PDF)
208+
.body(streamingResponseBody);
209+
}
210+
211+
194212
// ============== private (protected) method ===============
195213
private Sort createSort(SortType sortType) {
196214
return sortType.createSort();

0 commit comments

Comments
 (0)