Skip to content

Commit

Permalink
Merge pull request #6 from KTB-HACKATHON-TEAM-FLIGHT/feature/ai-serve…
Browse files Browse the repository at this point in the history
…r-connect

Feature: AI서버와의 연결을 위한 설정 및 구현
  • Loading branch information
Youthhing authored Sep 5, 2024
2 parents 7de7167 + 251d627 commit 812c888
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 12 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -11,16 +13,18 @@
import team.flight.backend.service.PostService;
import team.flight.backend.service.dto.FirstResponse;

@Tag(name = "PPT 관련 API")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/posts")
public class PostController {

private final PostService postService;

@Operation(summary = "PPT 생성 요청 API")
@PostMapping
public ResponseEntity<FirstResponse> 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()));
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<FirstResponse> testApi(@RequestBody FirstPostRequest request){
return ResponseEntity.ok().body(new FirstResponse(1L, request.request()));
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/team/flight/backend/dto/FirstPostRequest.java
Original file line number Diff line number Diff line change
@@ -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
) {
}
4 changes: 4 additions & 0 deletions src/main/java/team/flight/backend/entity/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Post, Long> {
Optional<Post> findByIdAndSessionId(Long postId, UUID sessionId);
}
14 changes: 6 additions & 8 deletions src/main/java/team/flight/backend/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@
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
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();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package team.flight.backend.service.dto;

import lombok.Getter;

@Getter
public class AiSendResponse {

private String result;
}

0 comments on commit 812c888

Please sign in to comment.