diff --git a/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/infrastructure/external/ClaudeAiContentGenerator.java b/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/infrastructure/external/ClaudeAiContentGenerator.java index 07b0602..7243c26 100644 --- a/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/infrastructure/external/ClaudeAiContentGenerator.java +++ b/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/infrastructure/external/ClaudeAiContentGenerator.java @@ -63,7 +63,7 @@ public class ClaudeAiContentGenerator implements AiContentGenerator { .bodyValue(requestBody) .retrieve() .bodyToMono(Map.class) - .timeout(Duration.ofSeconds(30)) + .timeout(Duration.ofSeconds(60)) .block(); String content = ""; diff --git a/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/presentation/controller/ContentController.java b/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/presentation/controller/ContentController.java index eba9ed8..fd40ffd 100644 --- a/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/presentation/controller/ContentController.java +++ b/smarketing-java/marketing-content/src/main/java/com/won/smarketing/content/presentation/controller/ContentController.java @@ -1,5 +1,7 @@ package com.won.smarketing.content.presentation.controller; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.won.smarketing.common.dto.ApiResponse; import com.won.smarketing.content.application.usecase.ContentQueryUseCase; import com.won.smarketing.content.application.usecase.PosterContentUseCase; @@ -9,6 +11,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -28,20 +31,23 @@ import java.util.List; @RequiredArgsConstructor public class ContentController { + @Autowired + private ObjectMapper objectMapper; + private final SnsContentUseCase snsContentUseCase; private final PosterContentUseCase posterContentUseCase; private final ContentQueryUseCase contentQueryUseCase; /** * SNS 게시물 생성 - * - * @param request SNS 콘텐츠 생성 요청 + * @return 생성된 SNS 콘텐츠 정보 */ @Operation(summary = "SNS 게시물 생성", description = "AI를 활용하여 SNS 게시물을 생성합니다.") @PostMapping(path = "/sns/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ResponseEntity> generateSnsContent(@Valid @RequestPart SnsContentCreateRequest request, - @RequestPart("files") List images) { + public ResponseEntity> generateSnsContent(@Valid @RequestPart("request") String requestJson, + @Valid @RequestPart("files") List images) throws JsonProcessingException { + SnsContentCreateRequest request = objectMapper.readValue(requestJson, SnsContentCreateRequest.class); SnsContentCreateResponse response = snsContentUseCase.generateSnsContent(request, images); return ResponseEntity.ok(ApiResponse.success(response, "SNS 콘텐츠가 성공적으로 생성되었습니다.")); } diff --git a/smarketing-java/store/build.gradle b/smarketing-java/store/build.gradle index dd9e26d..ef65d80 100644 --- a/smarketing-java/store/build.gradle +++ b/smarketing-java/store/build.gradle @@ -5,4 +5,6 @@ dependencies { // Azure Blob Storage 의존성 추가 implementation 'com.azure:azure-storage-blob:12.25.0' implementation 'com.azure:azure-identity:1.11.1' + + implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3' } \ No newline at end of file