Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
package com.phu.backend.controller.clova;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.phu.backend.dto.clova.ClovaSpeechResponseList;
import com.phu.backend.dto.clova.reqeust.ClovaMessage;
import com.phu.backend.dto.clova.response.ClovaSpeechResponseList;
import com.phu.backend.service.clova.ClovaService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
public class ClovaController {
private final ClovaService clovaService;

@GetMapping("/pt/clova/{member-id}/{file-id}")
@Operation(summary = "음성메모 텍스트 추출", description = "음성메모의 텍스트를 분석해 추출한다.")
public ResponseEntity<ClovaSpeechResponseList> uploadVoiceFile(@PathVariable(name = "file-id") Long fileId,
@PathVariable(name = "member-id") Long memberId) throws JsonProcessingException {
return ResponseEntity.ok().body(clovaService.clovaSpeech(fileId, memberId));
}

@PostMapping("pt/clova/test")
@Operation(summary = "챗봇 테스팅", description = "테스트")
public ResponseEntity<?> test(@RequestBody ClovaMessage request) throws JsonProcessingException {
return ResponseEntity.ok(clovaService.test(request));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.phu.backend.controller.voicefile;

import com.phu.backend.dto.clova.ClovaSpeechResponseList;
import com.phu.backend.dto.clova.response.ClovaSpeechResponseList;
import com.phu.backend.dto.voicefile.response.VoiceFileListResponse;
import com.phu.backend.dto.voicefile.response.VoiceFileResponse;
import com.phu.backend.service.voicefile.VoiceFileService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.phu.backend.domain.clovavoicetext;

import com.phu.backend.dto.clova.ClovaSpeechResponse;
import com.phu.backend.dto.clova.response.ClovaSpeechResponse;
import com.phu.backend.global.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.Builder;
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/phu/backend/dto/clova/reqeust/ClovaMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.phu.backend.dto.clova.reqeust;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class ClovaMessage {
private String content;
@Builder
public ClovaMessage(String content, String role) {
this.content = content;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.phu.backend.dto.clova;
package com.phu.backend.dto.clova.reqeust;

import lombok.Builder;
import lombok.Getter;
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/phu/backend/dto/clova/reqeust/ClovaXRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.phu.backend.dto.clova.reqeust;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class ClovaXRequest {
private String content;
private String role;
@Builder
public ClovaXRequest(String content, String role) {
this.content = content;
this.role = role;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.phu.backend.dto.clova.reqeust;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor
public class ClovaXRequestList {
private List<ClovaXRequest> messages;
@Builder
public ClovaXRequestList(List<ClovaXRequest> messages) {
this.messages = messages;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.phu.backend.dto.clova;
package com.phu.backend.dto.clova.response;

import lombok.Builder;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.phu.backend.dto.clova;
package com.phu.backend.dto.clova.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Builder;
Expand Down
56 changes: 53 additions & 3 deletions src/main/java/com/phu/backend/service/clova/ClovaService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
import com.phu.backend.domain.clovavoicetext.ClovaVoiceText;
import com.phu.backend.domain.member.Member;
import com.phu.backend.domain.voicefile.VoiceFile;
import com.phu.backend.dto.clova.ClovaSpeechRequest;
import com.phu.backend.dto.clova.ClovaSpeechResponse;
import com.phu.backend.dto.clova.ClovaSpeechResponseList;
import com.phu.backend.dto.clova.reqeust.ClovaMessage;
import com.phu.backend.dto.clova.reqeust.ClovaSpeechRequest;
import com.phu.backend.dto.clova.reqeust.ClovaXRequestList;
import com.phu.backend.dto.clova.response.ClovaSpeechResponse;
import com.phu.backend.dto.clova.response.ClovaSpeechResponseList;
import com.phu.backend.dto.clova.reqeust.ClovaXRequest;
import com.phu.backend.exception.dailychart.NotFoundChartMemberException;
import com.phu.backend.exception.member.NotFoundMemberException;
import com.phu.backend.exception.voicefile.NotFoundFileException;
Expand Down Expand Up @@ -39,13 +42,20 @@ public class ClovaService {
private final VoiceFileRepository voiceFileRepository;
private final RestTemplate restTemplate;
private final MemberRepository memberRepository;
private final ObjectMapper objectMapper;
private final MemberListRepository memberListRepository;
private final ClovaVoiceTextRepository clovaVoiceTextRepository;
private final MemberService memberService;
@Value("${ncp.clova.invoke-url}")
private String invokeUrl;
@Value("${ncp.clova.clova-secret-key}")
private String clovaSecret;
@Value("${ncp.clova.api-url}")
private String apiUrl;
@Value("${ncp.clova.api-key}")
private String apiKey;
@Value("${ncp.clova.gateway-key}")
private String gatewayKey;

public ClovaSpeechResponseList clovaSpeech(Long fileId, Long memberId) throws JsonProcessingException {
Member trainer = memberService.getMember();
Expand Down Expand Up @@ -140,5 +150,45 @@ private List<ClovaSpeechResponse> parseClovaSpeechResponse(String voiceResponse,

return responses;
}

public Object test(ClovaMessage request) throws JsonProcessingException {
List<ClovaXRequest> requestList = new ArrayList<>();

ClovaXRequest clovaXRequest = ClovaXRequest.builder()
.role("system")
.content(request.getContent())
.build();
requestList.add(clovaXRequest);

ClovaXRequestList clovaXRequestList = ClovaXRequestList.builder()
.messages(requestList)
.build();

RestTemplate restTemplate = new RestTemplate();
String url = apiUrl;
HttpHeaders headers = buildHeaders();
String body = objectMapper.writeValueAsString(clovaXRequestList);
HttpEntity<String> entity = new HttpEntity<>(body, headers);

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

log.info("body:", entity);

String responseBody = response.getBody();

JsonNode rootNode = objectMapper.readTree(responseBody);
String content = rootNode.path("result").path("message").path("content").asText();

return content;
}

public HttpHeaders buildHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("X-NCP-CLOVASTUDIO-API-KEY", apiKey);
headers.set("X-NCP-APIGW-API-KEY", gatewayKey);

return headers;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.phu.backend.domain.member.Member;
import com.phu.backend.domain.member.Part;
import com.phu.backend.domain.voicefile.VoiceFile;
import com.phu.backend.dto.clova.ClovaSpeechResponseList;
import com.phu.backend.dto.clova.response.ClovaSpeechResponseList;
import com.phu.backend.dto.voicefile.response.VoiceFileListResponse;
import com.phu.backend.dto.voicefile.response.VoiceFileResponse;
import com.phu.backend.exception.dailychart.NotFoundChartMemberException;
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ ncp:
clova:
invoke-url : ${INVOKE_URL}
clova-secret-key : ${CLOVA_SECRET_KEY}
api-url : ${CLOVA_URL}
api-key : ${CLOVA_API_KEY}
gateway-key : ${CLOVA_GATEWAY_KEY}
3 changes: 3 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ ncp:
clova:
invoke-url : ${INVOKE_URL}
clova-secret-key : ${CLOVA_SECRET_KEY}
api-url : ${CLOVA_URL}
api-key : ${CLOVA_API_KEY}
gateway-key : ${CLOVA_GATEWAY_KEY}

server:
port: 443
Expand Down
Loading