diff --git a/build.gradle b/build.gradle index 6b6ff07..3816c65 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + runtimeOnly 'io.netty:netty-resolver-dns-native-macos:4.1.94.Final:osx-aarch_64' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/src/main/java/team/flight/backend/controller/PostController.java b/src/main/java/team/flight/backend/controller/PostController.java index 9d8802e..7d7fb6c 100644 --- a/src/main/java/team/flight/backend/controller/PostController.java +++ b/src/main/java/team/flight/backend/controller/PostController.java @@ -1,5 +1,7 @@ package team.flight.backend.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -11,6 +13,7 @@ import team.flight.backend.service.PostService; import team.flight.backend.service.dto.FirstResponse; +@Tag(name = "PPT 관련 API") @RestController @RequiredArgsConstructor @RequestMapping("/api/posts") @@ -18,9 +21,10 @@ public class PostController { private final PostService postService; + @Operation(summary = "PPT 생성 요청 API") @PostMapping public ResponseEntity sendFirstRequest(@RequestBody FirstPostRequest request) { return ResponseEntity.ok() - .body(postService.sendUserFirstRequest(UUID.fromString(request.sessionId()), request.request())); + .body(postService.sendUserFirstRequest(UUID.fromString(request.sessionId()), request.postId(), request.request())); } } diff --git a/src/main/java/team/flight/backend/controller/TestController.java b/src/main/java/team/flight/backend/controller/TestController.java index ae03d7f..1fbb5ce 100644 --- a/src/main/java/team/flight/backend/controller/TestController.java +++ b/src/main/java/team/flight/backend/controller/TestController.java @@ -1,5 +1,7 @@ package team.flight.backend.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -9,11 +11,13 @@ import team.flight.backend.dto.FirstPostRequest; import team.flight.backend.service.dto.FirstResponse; +@Tag(name = "TEST 관련 API") @RestController @RestControllerAdvice @RequestMapping("/api/test") public class TestController { + @Operation(summary = "TEST 요청 API") @PostMapping public ResponseEntity testApi(@RequestBody FirstPostRequest request){ return ResponseEntity.ok().body(new FirstResponse(1L, request.request())); diff --git a/src/main/java/team/flight/backend/dto/FirstPostRequest.java b/src/main/java/team/flight/backend/dto/FirstPostRequest.java index a176549..e85f5fc 100644 --- a/src/main/java/team/flight/backend/dto/FirstPostRequest.java +++ b/src/main/java/team/flight/backend/dto/FirstPostRequest.java @@ -1,7 +1,13 @@ package team.flight.backend.dto; +import io.swagger.v3.oas.annotations.media.Schema; + public record FirstPostRequest( + @Schema(description = "존재하는 클라이언트 session-id") String sessionId, + @Schema(description = "존재하는 게시글 ID, 없으면 null", nullable = true) + Long postId, + @Schema(description = "사용자의 요청 프롬프트") String request ) { } diff --git a/src/main/java/team/flight/backend/entity/Post.java b/src/main/java/team/flight/backend/entity/Post.java index 8bae3b3..6a64a87 100644 --- a/src/main/java/team/flight/backend/entity/Post.java +++ b/src/main/java/team/flight/backend/entity/Post.java @@ -42,4 +42,8 @@ public Post(UUID sessionId, String request, String result) { public void updateResult(String result) { this.result = result; } + + public void updateRequest(String request) { + this.request = request; + } } diff --git a/src/main/java/team/flight/backend/repository/PostRepository.java b/src/main/java/team/flight/backend/repository/PostRepository.java index 74b20a1..5e454a8 100644 --- a/src/main/java/team/flight/backend/repository/PostRepository.java +++ b/src/main/java/team/flight/backend/repository/PostRepository.java @@ -1,7 +1,10 @@ package team.flight.backend.repository; +import java.util.Optional; +import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; import team.flight.backend.entity.Post; public interface PostRepository extends JpaRepository { + Optional findByIdAndSessionId(Long postId, UUID sessionId); } diff --git a/src/main/java/team/flight/backend/service/PostService.java b/src/main/java/team/flight/backend/service/PostService.java index 0e55faf..83bf618 100644 --- a/src/main/java/team/flight/backend/service/PostService.java +++ b/src/main/java/team/flight/backend/service/PostService.java @@ -14,20 +14,18 @@ public class PostService { private final WebClientSender webClientSender; private final PostRepository postRepository; - private final SessionIdValidator sessionIdValidator; @Transactional - public FirstResponse sendUserFirstRequest(UUID sessionId, String request) { - sessionIdValidator.validateSessionId(sessionId); - - Post post = Post.builder() + public FirstResponse sendUserFirstRequest(UUID sessionId, Long postId, String request) { + Post post = postRepository.findByIdAndSessionId(postId, sessionId).orElseGet(() -> Post.builder() .sessionId(sessionId) .request(request) - .build(); - postRepository.save(post); + .build()); - post.updateResult(webClientSender.sendFirstRequest(request)); + post.updateRequest(request); + post.updateResult(webClientSender.sendFirstRequest(request).getResult()); + postRepository.save(post); return FirstResponse.from(post); } } diff --git a/src/main/java/team/flight/backend/service/WebClientSender.java b/src/main/java/team/flight/backend/service/WebClientSender.java index 0616397..76f3362 100644 --- a/src/main/java/team/flight/backend/service/WebClientSender.java +++ b/src/main/java/team/flight/backend/service/WebClientSender.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import team.flight.backend.service.dto.AiSendRequest; +import team.flight.backend.service.dto.AiSendResponse; @Component @RequiredArgsConstructor @@ -11,12 +12,12 @@ public class WebClientSender { private final WebClient webClient; - //Todo ai 서버 스펙에 맞게 변경 - public String sendFirstRequest(String request) { + public AiSendResponse sendFirstRequest(String request) { return webClient.post() + .uri("/api/submit") .bodyValue(AiSendRequest.from(request)) .retrieve() - .bodyToMono(String.class) + .bodyToMono(AiSendResponse.class) .block(); } } diff --git a/src/main/java/team/flight/backend/service/dto/AiSendResponse.java b/src/main/java/team/flight/backend/service/dto/AiSendResponse.java new file mode 100644 index 0000000..923e955 --- /dev/null +++ b/src/main/java/team/flight/backend/service/dto/AiSendResponse.java @@ -0,0 +1,9 @@ +package team.flight.backend.service.dto; + +import lombok.Getter; + +@Getter +public class AiSendResponse { + + private String result; +}