add requestpart

This commit is contained in:
박서은 2025-06-18 09:40:03 +09:00
parent a7f5f61726
commit 81ddc643e5
3 changed files with 13 additions and 5 deletions

View File

@ -63,7 +63,7 @@ public class ClaudeAiContentGenerator implements AiContentGenerator {
.bodyValue(requestBody) .bodyValue(requestBody)
.retrieve() .retrieve()
.bodyToMono(Map.class) .bodyToMono(Map.class)
.timeout(Duration.ofSeconds(30)) .timeout(Duration.ofSeconds(60))
.block(); .block();
String content = ""; String content = "";

View File

@ -1,5 +1,7 @@
package com.won.smarketing.content.presentation.controller; 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.common.dto.ApiResponse;
import com.won.smarketing.content.application.usecase.ContentQueryUseCase; import com.won.smarketing.content.application.usecase.ContentQueryUseCase;
import com.won.smarketing.content.application.usecase.PosterContentUseCase; 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.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -28,20 +31,23 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ContentController { public class ContentController {
@Autowired
private ObjectMapper objectMapper;
private final SnsContentUseCase snsContentUseCase; private final SnsContentUseCase snsContentUseCase;
private final PosterContentUseCase posterContentUseCase; private final PosterContentUseCase posterContentUseCase;
private final ContentQueryUseCase contentQueryUseCase; private final ContentQueryUseCase contentQueryUseCase;
/** /**
* SNS 게시물 생성 * SNS 게시물 생성
*
* @param request SNS 콘텐츠 생성 요청
* @return 생성된 SNS 콘텐츠 정보 * @return 생성된 SNS 콘텐츠 정보
*/ */
@Operation(summary = "SNS 게시물 생성", description = "AI를 활용하여 SNS 게시물을 생성합니다.") @Operation(summary = "SNS 게시물 생성", description = "AI를 활용하여 SNS 게시물을 생성합니다.")
@PostMapping(path = "/sns/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(path = "/sns/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ApiResponse<SnsContentCreateResponse>> generateSnsContent(@Valid @RequestPart SnsContentCreateRequest request, public ResponseEntity<ApiResponse<SnsContentCreateResponse>> generateSnsContent(@Valid @RequestPart("request") String requestJson,
@RequestPart("files") List<MultipartFile> images) { @Valid @RequestPart("files") List<MultipartFile> images) throws JsonProcessingException {
SnsContentCreateRequest request = objectMapper.readValue(requestJson, SnsContentCreateRequest.class);
SnsContentCreateResponse response = snsContentUseCase.generateSnsContent(request, images); SnsContentCreateResponse response = snsContentUseCase.generateSnsContent(request, images);
return ResponseEntity.ok(ApiResponse.success(response, "SNS 콘텐츠가 성공적으로 생성되었습니다.")); return ResponseEntity.ok(ApiResponse.success(response, "SNS 콘텐츠가 성공적으로 생성되었습니다."));
} }

View File

@ -5,4 +5,6 @@ dependencies {
// Azure Blob Storage // Azure Blob Storage
implementation 'com.azure:azure-storage-blob:12.25.0' implementation 'com.azure:azure-storage-blob:12.25.0'
implementation 'com.azure:azure-identity:1.11.1' implementation 'com.azure:azure-identity:1.11.1'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
} }