Skip to content

Commit

Permalink
Develop (KUIT-PROJECT#79)
Browse files Browse the repository at this point in the history
* refactor: 디렉토리 구조 변경

* refactor: 디렉토리명 변경 (common -> global)

* docs: 의존성 추가 & security 전체 permit-all

* feat: text-to-speech of typecast-api

* JPA 도메인 설계

* JPA 도메인 설계

* refactor: tts 컨트롤러 삭제 & dto 어노테이션 정리

* refactor: typecastClientUtil -> web, type 로 클래스 분리

* docs: 디렉토리 구조 정리 & enum 필드 대문자로 변경

* docs: 디렉토리 구조 정리 & actorId secret-yml 변수로 수정

* docs: enum 파일 domain 하위로 이동

* Update CICD.yml

* docs: 디렉토리 구조 변경

* [Feature] AWS S3 단일 파일 업로드 (KUIT-PROJECT#19)

* docs: s3 의존성 추가 & application.yml 최적화

* feat: aws s3 단일 파일 업로드 (jpg, png, jpeg, mp3)

* build: OAuth, JWT 라이브러리 추가

* feat : 소셜 로그인 구현

* [Refactor] S3Util -> S3FileUtil & S3Util 로 기능별 분리 (KUIT-PROJECT#20)

* refactor: S3File & S3FileUtil 생성

* refactor: 임시파일보관 dir 볼륨 줄이기

* refactor: 로컬파일업로드 s3 upload 호출 전에 수행

* refactor: 파일확장자별로 디렉토리 분류 & 유효한 파일명 변환 로직 추가

* feat: 생성된 객체 URL S3File 에 담아 반환 (getUrl)

* feat: s3Util 단일 객체 삭제

* fix: getUrl() 접근자 private 수정

* refactor : enum 추가, yml 수정

* [Infra] 서버 환경설정 파일 분리 및 gitignore 처리 (KUIT-PROJECT#28)

* feat : application-secret.yml gitignore 추가

* Solve Conflict

* fix : HealthCheckController 수정

* fix : yml 수정에 따른 도커파일 환경변수 삭제

* fix : /hc 미사용 엔드포인트 삭제

* chore: set target url 시 리디렉션 조건 적용

: set target url 시 리디렉션 조건 적용

* chore: set target IP 301 시 리디렉션 반영

* chore: set target IP crul 포트번호 추가

* chore: set target IP 포트번호 삭제

* chore: https 도메인 적용

* chore: https & 도메인 적용

* chore: domain 변수 제거

* chore: set tartget port 다시 도메인으로 변경

* chore: 컨테이너 프로젝트 이름 지정

* chore: 변수 선언 오타 수정

* chore: target port 설정 시 현재 컨테이너로 구별 (curl x)

* chore: 도커 스크립트 sudo 추가

* chore: GITHUB_ENV 선언

* chore: 변수명 실수 수정

* chore: github_env 따옴표로 선언

* chore: 빌드 시간 최소화 (캐싱)

* [Feature] 다이어리 탭 조회 기능 구현 (KUIT-PROJECT#23)

* feat : 더미 데이터 자동 삽입을 위한 data.sql 추가

* build : data.sql auto init 설정

* feat : DateUtil Class 추가

* test : DateUtilTest 추가

* feat : BaseResponse & BaseResponseStatus 추가

* feat : JWT 구현 전 임시 회원 조회를 위한 생성자 생성

* feat : MemoryController 추가

* feat : Memory 조회 관련 DTO 추가

* feat : hashTag 조회를 위한 다대다 관계 생성

* feat : Memory 조회를 위한 Repository 생성

* feat : MemoryService 생성

* test : MemoryRepositoryTest 추가

* fix : OrdeOrder -> Order 오타 수정

* fix : 즐겨찾기 BOOKMARK로 통일

* fix : MemoryDTO date 소대문자 수정

* fix : @repository 제거

* fix : 여백 수정

* fix : sout문 제거

* fix : 불필요 로그 제거

* fix : 썸네일 이미지 리스트 생성 로직 메소드 분리

* fix : 다이어리 추억 카드 조회 메소드 분리 및 DTO 추가

* fix : 전체생성성사 private 전환 및 정적 메서드 선언

* fix : 미사용 클래스 제거

* refactor : signWith 메서드 변경

* [Infra] Swagger 구축 (KUIT-PROJECT#37)

* feat: 의존성 추가 & 기본 설정 구축

* feat: 컨트롤러 summary (예시)

* fix: 생성자 필드 누락

* fix: 로컬용 환경변수 위치 수정

* feat : data.sql 더미 데이터 추가

* fix : musicUrl 추가

* feat : Playlist 조회를 위한 Repository 생성

* feat : PlaylistService 생성

* feat : PlaylistController 생성

* feat : Playlist 음악 조회를 위한 MemoryPlaylistRepository 생성

* feat : PlaylistDto 생성

* feat : PlaylistResponse class 추가

* chore: data.sql 주석처리

* chore: 테스트 데이터 자동 주입 삭제

* fix: 테스트 데이터 삽입 설정 주석

* [Feat] 서버 에러로그 발생 시 디스코드 알림 연동 (KUIT-PROJECT#39)

* feat: 서버 에러로그 발생 시 디스코드 알림 연동

* feat: host, method, url, query, cookie 정보 추가

* refactor: url -> uri 변경 (host 중복)

* [CICD] PR 생성 시 배포 & 테스트 진행 (KUIT-PROJECT#45)

* chore: add pr-test

* chore: report test 삭제

* [Feature] TTS 요청 시 webhook 으로 응답 받기 (KUIT-PROJECT#47)

* refactor: post 타입 제너릭 변경

* feat: tts 요청 webhook 구현

* chore: delete cache

* [Setting] CustomException & ExceptionHandler 생성 (KUIT-PROJECT#31)

* feat : AgarangException 추가

* feat : Agarang Exception Handler 추가

* [Docs] (pr 생성 시 깃 액션 동작 테스트용 pr 입니다.) 이슈 템플릿 수정 (KUIT-PROJECT#49)

* docs: 이슈 템플릿 수정

* fix: git actions 캐시 수정

* fix: 아 왜 안 되는데

* chore: pr test 보류 (주석)

* feat : data.sql memory에 music_title column 추가

* fix : memory musicTitle 추가

* refactor : 사용하지 않는 DTO 클래스 제거

* refactor : 불필요한 @repository  제거

* feat : MusicDto 추가

* Refactor : PlaylistDto 클래스 빌더 패턴 추가

* refactor : MusicBookmark 엔티티 memory -> playlist 폴더로 이동

* feat : MusicBookmarkRepository 추가

* chore: 불필요한 코드 제거 (커밋 수정)

* refactor : MusicUrlsResponse -> PlaylistTracksResponse 변경

* feat : 메서드 이름 변경 및 DB 조회 로직 변경

* feat : RefreshToken 구현

* refactor : MusicDto mood -> hasgtags로 변경

* [Feature] GPT 이미지 기반 질문 1 생성 (with tts) (KUIT-PROJECT#51)

* refactor: ai-dto 파일구조 분리 (typecast & gpt)

* refactor: typecast 파일구조 수정

* refactor: s3 임시파일 업로드 매개변수 수정

- s3File -> MultipartFile

* fix: tts speakUrl 을 pk 로 저장

* feature: gpt openai 요청&응답 dto 설계

* feature: 이미지 기반 질문1 생성

* refactor: prompt 생성 시 매개변수 강제

* fix: gpt 이미지 분석 시 인코딩파일로 요청 (s3 x)

* refactor: jsonNaming 어노테이션 변경

* refactor: 요청용 dto noArgs 삭제

* refactor: TypecastMessageRequest.java 삭제

* fix: Typecast 웹훅 대기 시간 연장 (0.5초)

* [Feature] Redis 캐시 구현 및 ai-service 반영 (KUIT-PROJECT#60)

* fix: deploy 용 컨트롤러 common 파일로 이동 & 불필요 dto 삭제

* fix: deploy 관련 불필요 변수 삭제

* feat: redis 환경 구축 & crud test

* fix: 임시 jpa entity -> redis dto 변경

* refactor: (image->질문1) historyMessage 캐시 적용 & 테스트

* refactor: (image->질문1) typecast 캐시 적용 & 테스트

* fix: redis 필요 없는 필드 삭제

* refactor: redis GET null 예외 처리 (optional)

* Delete .github/workflows/PR-TEST.yml

* refactor : checkBookmarkStatus 메소드 수정

* fix : checkBookmarkStatus 메소드 코드 다시 수정

* Feat : 추억 다이어리 즐겨찾기, 수정, 삭제 로직 추가 (KUIT-PROJECT#58)

* feat : BaeResponse 빈생성자 추가, 에러상태값 추가

* feat : Memory 연관 레포지토리 생성

* feat : 수정, 삭제, 즐겨찾기 요청 DTO 추가

* feat : 생성자 추가

* feat : 업데이트 도메인 로직 추가

* feat : 수정, 삭제, 즐겨찾기 로직 구현

* fix : BookmarkRequest 필드 이름 수정

* fix : Long타입 변경으로 인한 파싱 제거

* fix : DTO 필드 명 변경

* [Fix] MusicBookmarkRepository 타입 오류 해결 (KUIT-PROJECT#62)

* fix : MusicBookmarkRepository 타입 불일치 문제 해결

* refact : MusicBookmark,MusicBookmarkRepository 폴더 이동

* docs: yml 구조 재정리 (중복 제거) (KUIT-PROJECT#61)

* fix : 중복된 빈 제거 (KUIT-PROJECT#64)

* fix : branch rebase

* refactor : Utils 생성, 기존 코드 수정

* fix : rebase branch

* [Hotfix] redis-repository 및 jpa 빌드 설정 (KUIT-PROJECT#65)

* fix: redisRepository 삭제

* fix: redisRepository 사용 안 함 & jpa 제일 마지막 빌드

* chore: green 포트번호 누락 수정 (배포실패)

* [Feature] AI 태담 생성 (KUIT-PROJECT#66)

* refactor: gpt 채팅 로깅제거 & 메서드 및 enum 명 변경

* refactor: gptHistoryMessage 필드 타입 변경

* refactor: gpt 통신용 dto 와 구분을 위한 이름 변경

* feat: history chat 기반 gpt 채팅 구현

* fix: redis update 삭제 (save 대체 가능)

* feat: 두번째 질문 & 응답 구현

* feat: 비동기 메서드를 위한 환경 구축

* feat: 마지막 응답 저장 & 비동기 태담 생성

* refactor: webhook 스레드 반복문으로 수정

* refactor : API 리팩터링

* [Hot-Fix] 삭제된 BaseresRonse 임포트 삭제 & 에러처리 전략 설계 (KUIT-PROJECT#71)

* fix: 삭제된 baseresponse 임포트 제거

* fix: 비지니스 로직 exception 네이밍 변경

* feat: 전역 exception 처리

* feat: 파일 크기 초과 exception 처리

* refactor: 디버깅용 stack trace 프린트

* feat: redis 연결 실패 및 전역 에러 처리 구현

* feat: 컨테이너 네트워크 연결 명령어 추가

* feat : 코멘트 내용 반영

* feat : Home, Setting API

* [Feature] 음악 선택사항 저장 및 ai & file 예외 처리 (KUIT-PROJECT#72)

* feat: 음악 선택 사항 저장

* fix: No static resource 에러 방지 엔드포인트 추가

* feat: No static resource 예외처리

* refactor: file 관련 예외 처리

* refactor: ai 관련 예외 처리

* refactor: 음악 선택 예외처리

* fix : 컨트롤러 URL 수정

* refactor : RuntimeException -> BusinessException 변경

* fix : HomeAPI 수정

* fix : getFamilyRole 엔티티 -> DTO 수정

* fix : 기본 생성자 추가

* refactor: gpt prompt 생성 util 분리

* feat: 캐릭터 말풍선 텍스트 생성 (gpt)

* refactor: gpt 응답 온도 실수 방지

* docs: 파일명 변경 & 테스트 코드 오류 수정

* feat : 캐릭터 홈 말풍선

* feat : memberDto memberID(PK) 추가

* refactor : babyName, babyDueDate -> newBaby로 통합

* fix : Member Baby DB연결

* feat : 코드 생성Util

* feat : 코드 생성 중복 확인

* refactor : 아기 등록 과정 통합

* [Feature] GPT 를 활용한 musicgen promt 및 노래 제목 생성 (KUIT-PROJECT#76)

* feat: gpt 응답 json 파싱

* refactor: history-message 필드 수정

* feat: musicgen prompt & 노래 제목 생성

* refactor : providerId -> id 변경

* refactor : memberRepository 메서드 삭제
fix : getMemberId 오타수정 "Id" -> "memberId"

* fix: 디스코드 에러요약 내용 수정

---------

Co-authored-by: AppleMint98 <[email protected]>
Co-authored-by: SeongHoHong <[email protected]>
Co-authored-by: Han Ju Kim <[email protected]>
Co-authored-by: Bae <[email protected]>
Co-authored-by: junyoungBae1 <[email protected]>
  • Loading branch information
6 people authored Aug 7, 2024
1 parent 858d8b9 commit d700819
Show file tree
Hide file tree
Showing 155 changed files with 5,040 additions and 132 deletions.
17 changes: 17 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,29 @@ assignees: ''

> 어떤 버그인지 간결하게 설명해주세요

<br/>

## 어떤 상황에서 발생한 버그인가요?

> (가능하면) Given-When-Then 형식으로 서술해주세요
### GIVEN


### WHEN


### THEN


<br/>

## 예상 결과

> 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요

<br/>

## 참고할만한 자료(선택)
6 changes: 6 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@ assignees: ''

> 추가하려는 기능에 대해 간결하게 설명해주세요

<br/>

## 작업 상세 내용

- [ ] TODO
- [ ] TODO
- [ ] TODO


<br/>

## 참고할만한 자료(선택)
9 changes: 9 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.MD
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,21 @@

> ex) #이슈번호, #이슈번호

<br/>

## 📝작업 내용

> 이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)

<br/>

### 스크린샷 (선택)


<br/>

## 💬리뷰 요구사항(선택)

> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
26 changes: 20 additions & 6 deletions .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ name: CICD

on:
push:
branches: [ "main" ]
branches:
- "main"
- "develop"

permissions:
contents: read
Expand All @@ -13,6 +15,17 @@ jobs:
steps:
- uses: actions/checkout@v4

# Cache
- name: Cache Gradle
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# JDK
- name: Install JDK 17
uses: actions/setup-java@v4
Expand Down Expand Up @@ -48,12 +61,12 @@ jobs:
needs: build
runs-on: ubuntu-latest
steps:
- name: Set Target IP
- name: Set Target Port
run: |
STATUS=$(curl -o /dev/null -w "%{http_code}" "http://${{ secrets.AGARANG_SERVER_IP }}/env")
STATUS=$(curl -L -o /dev/null -w "%{http_code}" "https://agarang.site/env")
echo $STATUS
if [ $STATUS = 200 ]; then
CURRENT_UPSTREAM=$(curl -s "http://${{ secrets.AGARANG_SERVER_IP }}/env")
CURRENT_UPSTREAM=$(curl -L -s "https://agarang.site/env")
else
CURRENT_UPSTREAM=green
fi
Expand All @@ -78,7 +91,7 @@ jobs:
script_stop: true
script: |
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/agarang:latest
sudo docker-compose -f docker-compose-${{env.TARGET_UPSTREAM}}.yml up -d
sudo docker-compose -f docker-compose-${{env.TARGET_UPSTREAM}}.yml -p ${{env.TARGET_UPSTREAM}} up -d
- name: Check deploy server URL
uses: jtalk/url-health-check-action@v4
Expand All @@ -97,13 +110,14 @@ jobs:
script: |
sudo docker exec -i nginxserver bash -c 'echo "set \$service_url ${{ env.TARGET_UPSTREAM }};" > /etc/nginx/conf.d/service-env.inc && nginx -s reload'
- name: Stop current server
- name: Stop current server & network connect
uses: appleboy/ssh-action@master
with:
username: ubuntu
host: ${{ secrets.AGARANG_SERVER_IP }}
key: ${{ secrets.EC2_SSH_KEY }}
script_stop: true
script: |
sudo docker network connect my-network ${{env.TARGET_UPSTREAM}}
sudo docker stop ${{env.CURRENT_UPSTREAM}}
sudo docker rm ${{env.CURRENT_UPSTREAM}}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,7 @@ out/

### VS Code ###
.vscode/

src/main/resources/application-secret.yml
src/main/resources/application-secret-prod.yml
src/test/resources/*
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ ARG JAR_FILE=build/libs/*.jar
ARG PROFILES
ARG ENV
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILES}", "-Dserver.env=${ENV}", "-jar", "/app.jar"]
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILES}", "-jar", "/app.jar"]
28 changes: 27 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,44 @@ configurations {

repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// DB
runtimeOnly 'com.mysql:mysql-connector-j'
// WebClient for HTTP AI API
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'io.netty:netty-resolver-dns-native-macos:4.1.68.Final:osx-aarch_64'
// JSON
implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.2'
implementation 'com.fasterxml.jackson.core:jackson-core:2.17.2'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.17.2'
// S3
implementation platform("software.amazon.awssdk:bom:2.26.20")
implementation 'software.amazon.awssdk:s3'
// Oauth2
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'
// Discord Logs
implementation 'com.github.napstr:logback-discord-appender:1.0.0'
// Redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// Apache Commons Lang
implementation 'org.apache.commons:commons-lang3:3.12.0'
}

tasks.named('test') {
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/kuit/agarang/AgarangApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class AgarangApplication {

public static void main(String[] args) {
Expand Down
28 changes: 0 additions & 28 deletions src/main/java/com/kuit/agarang/common/config/SecurityConfig.java

This file was deleted.

This file was deleted.

16 changes: 0 additions & 16 deletions src/main/java/com/kuit/agarang/deploy/dto/ServerInfo.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.kuit.agarang.domain.ai.config;

import io.netty.channel.ChannelOption;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;
import reactor.netty.http.client.HttpClient;


@Configuration
public class WebClientConfig {

DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();

HttpClient httpClient = HttpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000); // 연결 시간 10초

@Bean
public WebClient webClient() {
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
return WebClient.builder()
.uriBuilderFactory(factory)
.codecs(config -> config.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.kuit.agarang.domain.ai.controller;

import com.kuit.agarang.domain.ai.model.dto.MusicAnswer;
import com.kuit.agarang.domain.ai.model.dto.TextAnswer;
import com.kuit.agarang.domain.ai.model.dto.QuestionResponse;
import com.kuit.agarang.domain.ai.model.entity.cache.GPTChatHistory;
import com.kuit.agarang.domain.ai.service.AIService;
import com.kuit.agarang.global.common.model.dto.BaseResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api/memory/ai")
@RequiredArgsConstructor
public class MemoryAIController {

private final AIService AIService;

@PostMapping("/image-to-question")
public ResponseEntity<BaseResponse<QuestionResponse>> getImageQuestion(@RequestParam MultipartFile image) throws Exception {
return ResponseEntity.ok(new BaseResponse<>(AIService.getFirstQuestion(image)));
}

@PostMapping("/first-ans")
public ResponseEntity<BaseResponse<QuestionResponse>> getNextQuestion(@RequestBody TextAnswer answer) {
return ResponseEntity.ok(new BaseResponse<>(AIService.getNextQuestion(answer)));
}

@PostMapping("/second-ans")
public ResponseEntity<BaseResponse<Void>> saveLastAnswer(@RequestBody TextAnswer answer) {
AIService.saveLastAnswer(answer);
AIService.createMemoryText(answer.getId());
return ResponseEntity.ok(new BaseResponse<>());
}

@PostMapping("/music")
public ResponseEntity<BaseResponse<Void>> saveLastAnswer(@RequestBody MusicAnswer answer) {
GPTChatHistory chatHistory = AIService.setMusicChoice(answer);
AIService.createMusicGenPrompt(chatHistory);
return ResponseEntity.ok(new BaseResponse<>());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.kuit.agarang.domain.ai.controller;

import com.kuit.agarang.domain.ai.model.dto.typecast.TypecastWebhookResponse;
import com.kuit.agarang.domain.ai.service.TypecastService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/ai/tts")
@RequiredArgsConstructor
public class TypecastController {

private final TypecastService typecastService;

@PostMapping("/webhook")
public void webhook(@RequestBody TypecastWebhookResponse response) {
typecastService.saveAudio(response);
}
}
Loading

0 comments on commit d700819

Please sign in to comment.