diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000..87c2a995
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,11 @@
+# ๐ Pull Request
+
+**[์์
๋ด์ฉ์ ๊ฐ๋ตํ ์ ์ด์ฃผ์ธ์]**
+
+## #๏ธโฃ ์ฐ๊ด๋ ์ด์
+
+#์ด์๋ฒํธ
+
+## ๐ ์์
๋ด์ฉ
+
+์์ ํ ๋ด์ฉ์ด๋ ์ถ๊ฐํ ๊ธฐ๋ฅ์ ๋ํด ์์ธํ ์ค๋ช
ํด ์ฃผ์ธ์.
diff --git a/.github/workflows/buildTest.yml b/.github/workflows/buildTest.yml
index 45ec2019..c0430b91 100644
--- a/.github/workflows/buildTest.yml
+++ b/.github/workflows/buildTest.yml
@@ -1,4 +1,4 @@
-name: CI & Deploy Pipeline
+name: PR CI and develop push CI
# 1. ์ด๋ฒคํธ ์ค์
on:
@@ -19,7 +19,7 @@ on:
# 2. ๋น๋ ๋ฐ ํ
์คํธ ์ก
jobs:
- build-and-test:
+ CI-start:
runs-on: ubuntu-latest
env:
EMAIL_USERNAME: ${{ secrets.EMAIL_USERNAME }}
@@ -44,6 +44,11 @@ jobs:
steps:
+ # Node.js ์ค์น
+ - name: Install Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '18'
# ์ฝ๋ ์ฒดํฌ์์
- name: Check out code
uses: actions/checkout@v4
@@ -55,8 +60,15 @@ jobs:
java-version: '17'
distribution: 'temurin'
+ # Gradle Wrapper ๊ถํ ๋ถ์ฌ
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
- # Gradle ์์กด์ฑ ์บ์ ์ค์
+ # gradlew ํ์ผ ์คํ๊ถํ ์ค์
+ - name: Grant execute permission for gradlew
+ run: chmod +x ./gradlew
+ shell: bash
+ # Gradle ์์กด์ฑ ์บ์ ์ค์
- name: Cache Gradle dependencies
uses: actions/cache@v4
with:
@@ -65,26 +77,35 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- # Gradle Wrapper ๊ถํ ๋ถ์ฌ
- - name: Grant execute permission for gradlew
- run: chmod +x gradlew
-
- # gradlew ํ์ผ ์คํ๊ถํ ์ค์
- - name: Grant execute permission for gradlew
- run: chmod +x ./gradlew
- shell: bash
+ # Json ํ์ผ ์
๋ก๋
- name: Create JSON Config File
env:
- TTS_JSON_CONTENT: ${{ secrets.TTS_JSON }}
+ TTS_JSON_CONTENT: ${{ secrets.TTS_JSON_CONTENT }}
run: |
- echo "${TTS_JSON_CONTENT}" > src/main/resources/tts.json
+ echo "${TTS_JSON_CONTENT}" | base64 -d > src/main/resources/tts.json
echo $TTS_JSON_CONTENT
-
- # ๋น๋ ๋ฐ ํ
์คํธ ์คํ
+ - name: Set Cache Directory Permissions
+ run: |
+ if [ -d "~/.sonar/cache" ]; then chmod -R 777 ~/.sonar/cache; fi
+ if [ -d "~/.gradle/caches" ]; then chmod -R 777 ~/.gradle/caches; fi
+
+ # build and Test
- name: Build and Test
run: ./gradlew build
+ # ์๋ํ๋ธ ์คํ
+ - name: Sonarqube Scan
+ run: ./gradlew sonar -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} -Dsonar.token=${{ secrets.SONAR_TOKEN }}
+
+ # 3-1. ์๋ํ๋ธ ํจํค์ง ์บ์ฑ ์ค์
+ - name: Cache SonarQube packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.sonar/cache
+ key: ${{ runner.os }}-sonar
+ restore-keys: ${{ runner.os }}-sonar
+
# Gradle Test๋ฅผ ์คํํ๋ค
- name: Test with Gradle
run: ./gradlew --info test
@@ -97,36 +118,4 @@ jobs:
junit_files: '**/build/test-results/test/TEST-*.xml'
- name: Lint Checks
- run: ./gradlew check
- # # 3. develop์์ main์ผ๋ก ์๋ ๋ฐฐํฌ ์์
- # deploy-to-main:
- # # develop ๋ธ๋์น์ push๋ ๋๋ง ์คํ
- # if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
-
- # runs-on: ubuntu-latest
- # needs: build-and-test # ๋น๋์ ํ
์คํธ๊ฐ ์๋ฃ๋ ํ์ ์คํ
-
- # steps:
- # # ์ฝ๋ ์ฒดํฌ์์
- # - name: Check out code
- # uses: actions/checkout@v3
-
- # - name: Configure git
- # run: |
- # git config --global user.name "${{ github.actor }}"
- # git config --global user.email "${{ github.actor }}@users.noreply.github.com"
-
- # # main ๋ธ๋์น๋ก ๋ณํฉ
- # - name: Merge develop to main
- # run: |
- # git remote update
- # git checkout main
- # git config pull.rebase true
- # git pull origin main # ์ต์ ์ํ๋ก ๋๊ธฐํ
- # git pull origin develop --allow-unrelated-histories
- # git rebase --skip
-
- # # ๋ณํฉ ๊ฒฐ๊ณผ๋ฅผ main ๋ธ๋์น์ ํธ์
- # - name: Push to main
- # run: |
- # git push origin main
+ run: ./gradlew check
\ No newline at end of file
diff --git a/.github/workflows/cdscript.yml b/.github/workflows/cdscript.yml
deleted file mode 100644
index d9dee9b4..00000000
--- a/.github/workflows/cdscript.yml
+++ /dev/null
@@ -1,88 +0,0 @@
-#name: CD
-#
-## 1. ์ด๋ฒคํธ ์ค์
-#on:
-# # PR ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๋น๋์ ํ
์คํธ ์คํ
-# push:
-# branches:
-# - main
-#jobs:
-# deploy:
-# runs-on: ubuntu-latest
-# env:
-# EMAIL_USERNAME: ${{ secrets.EMAIL_USERNAME }}
-# EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }}
-# EMAIL_TITLE: ${{ secrets.EMAIL_TITLE }}
-# EMAIL_CONTENT_TEMPLATE: ${{ secrets.EMAIL_CONTENT_TEMPLATE }}
-# SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
-# AWS_S3_ACCESSKEY: ${{ secrets.AWS_S3_ACCESSKEY }}
-# AWS_S3_SECRETKEY: ${{ secrets.AWS_S3_SECRETKEY }}
-# AWS_S3_BUKET_NAME: ${{ secrets.AWS_S3_BUKET_NAME }}
-# AWS_S3_REGION: ${{ secrets.AWS_S3_REGION }}
-# VC_URL: ${{ secrets.VC_URL }}
-# VC_APIKEY: ${{ secrets.VC_APIKEY }}
-#
-#
-#
-# steps: # 1. ์ฝ๋ ์ฒดํฌ์์
-# - name: Check out code
-# uses: actions/checkout@v4
-#
-# # 2. JDK 17 ์ค์น
-# - name: Set up JDK 17
-# uses: actions/setup-java@v4
-# with:
-# java-version: '17'
-# distribution: 'temurin'
-#
-# # 3. Gradle ์์กด์ฑ ์บ์ ์ค์
-# - name: Cache Gradle dependencies
-# uses: actions/cache@v4
-# with:
-# path: ~/.gradle/caches
-# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
-# restore-keys: |
-# ${{ runner.os }}-gradle-
-#
-# # 4. Gradle Wrapper ๊ถํ ๋ถ์ฌ
-# - name: Grant execute permission for gradlew
-# run: chmod +x ./gradlew
-#
-# # 5. JSON Config ํ์ผ ์์ฑ
-# - name: Create JSON Config File
-# env:
-# TTS_JSON_CONTENT: ${{ secrets.TTS_JSON }}
-# run: |
-# echo "${TTS_JSON_CONTENT}" > src/main/resources/tts.json
-#
-# # 6. ๋น๋ ๋ฐ ํ
์คํธ ์คํ
-# - name: Build and Test
-# run: ./gradlew build
-#
-# - name: Configure AWS credentials
-# uses: appleboy/ssh-action@master # ssh ์ ์ ์คํ์์ค
-# with:
-# host: ${{ secrets.REMOTE_IP }} # ์ธ์คํด์ค IP
-# username: ${{ secrets.REMOTE_USER }} # ์ฐ๋ถํฌ ์์ด๋
-# key: ${{ secrets.REMOTE_PRIVATE_KEY }} # ec2 instance pem key
-# port: ${{ secrets.REMOTE_SSH_PORT }} # ์ ์ํฌํธ
-# timeout: 120s
-# debug: true # ๋๋ฒ๊ทธ ๋ชจ๋ ํ์ฑํ
-# script: |
-# # 8080ํฌํธ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค ํ์ธ
-# PID=$(lsof -t -i:8080)
-#
-# # ํฌํธ๊ฐ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ํ๋ก์ธ์ค ์ข
๋ฃ
-# if [ -n "$PID" ]; then
-# echo "8080 ํฌํธ๋ฅผ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค (PID: $PID)๋ฅผ ์ข
๋ฃํฉ๋๋ค."
-# else
-# echo "8080 ํฌํธ๋ ์ฌ์ฉ ์ค์ด์ง ์์ต๋๋ค."
-# fi
-#
-# # ์คํฌ๋ฆฝํธ ์คํํ ๊ณณ์ผ๋ก ์ด๋
-# cd /home/ubuntu/app
-#
-# # ์๋ก์ด ๋ฐฐํฌ ์คํฌ๋ฆฝํธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
-# echo "deploy.sh๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํฉ๋๋ค."
-# nohup ./deploy.sh > deploy.log 2>&1 &
-# echo "์๋ก์ด deploy.sh๊ฐ ์คํ ์ค์
๋๋ค."
\ No newline at end of file
diff --git a/.github/workflows/dockerdeploy.yml b/.github/workflows/dockerdeploy.yml
index 3614f514..56868442 100644
--- a/.github/workflows/dockerdeploy.yml
+++ b/.github/workflows/dockerdeploy.yml
@@ -1,4 +1,4 @@
-name: CD
+name: MAIN CI&CD
# 1. ์ด๋ฒคํธ ์ค์
on:
@@ -26,18 +26,32 @@ jobs:
AWS_SQS_QUEUE_URL: ${{ secrets.AWS_SQS_QUEUE_URL }}
AWS_SQS_VIRTUAL_QUEUE_NAME: ${{ secrets.AWS_SQS_VIRTUAL_QUEUE_NAME }}
- steps: # 1. ์ฝ๋ ์ฒดํฌ์์
+ steps:
+
+ - name: Install Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '18'
+
- name: Check out code
uses: actions/checkout@v4
- # 2. JDK 17 ์ค์น
+ # JDK 17 ์ค์น
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- # 3. Gradle ์์กด์ฑ ์บ์ ์ค์
+ # Gradle Wrapper ๊ถํ ๋ถ์ฌ
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
+
+ # gradlew ํ์ผ ์คํ๊ถํ ์ค์
+ - name: Grant execute permission for gradlew
+ run: chmod +x ./gradlew
+ shell: bash
+ # Gradle ์์กด์ฑ ์บ์ ์ค์
- name: Cache Gradle dependencies
uses: actions/cache@v4
with:
@@ -46,32 +60,49 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- # 4. Gradle Wrapper ๊ถํ ๋ถ์ฌ
- - name: Grant execute permission for gradlew
- run: chmod +x ./gradlew
-
- # 5. JSON Config ํ์ผ ์์ฑ
+ # Json ํ์ผ ์
๋ก๋
- name: Create JSON Config File
env:
- TTS_JSON_CONTENT: ${{ secrets.TTS_JSON }}
+ TTS_JSON_CONTENT: ${{ secrets.TTS_JSON_CONTENT }}
run: |
- echo "${TTS_JSON_CONTENT}" > src/main/resources/tts.json
+ echo "${TTS_JSON_CONTENT}" | base64 -d > src/main/resources/tts.json
+ echo $TTS_JSON_CONTENT
- # 6. ๋น๋ ๋ฐ ํ
์คํธ ์คํ
+ - name: Set Cache Directory Permissions
+ run: |
+ if [ -d "~/.sonar/cache" ]; then chmod -R 777 ~/.sonar/cache; fi
+ if [ -d "~/.gradle/caches" ]; then chmod -R 777 ~/.gradle/caches; fi
+
+ #build and Test
- name: Build and Test
- run: ./gradlew build -x test
+ run: ./gradlew build
+
+ # ์๋ํ๋ธ ์คํ
+ - name: Sonarqube Scan
+ run: ./gradlew sonar -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} -Dsonar.token=${{ secrets.SONAR_TOKEN }}
+ # ์๋ํ๋ธ ํจํค์ง ์บ์ฑ ์ค์
+ - name: Cache SonarQube packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.sonar/cache
+ key: ${{ runner.os }}-sonar
+ restore-keys: ${{ runner.os }}-sonar
+
+ # ๋์ปค ๋ก๊ทธ์ธ
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- # push ๊น์ง๋ง ํ๊ณ CD๋ ๊ทธ๋ฅ ์คํฌ๋ฆฝํธ ์คํํด์ docker pull or run์ผ๋ก ํ์ผ์ ๋ฐ์์ ์คํํ ๊น? ๋ฌด์ค๋จ ๋ฐฐํฌ๋ ๊ทธ๋ ๊ฒ ํด์ผํ ๋ฏ?
+
+ # ๋์ปค ์ด๋ฏธ์ง ์์ฑ ๋ฐ ํธ์ฌ
- name: Build and Push Docker Image
run: |
docker build -t ${{ secrets.DOCKER_ID }}/${{ secrets.DOCKER_IMAGE }}:1.0 .
docker push ${{ secrets.DOCKER_ID }}/${{ secrets.DOCKER_IMAGE }}:1.0
+# ์๋ฒ ๋ฐฐํฌ
CD:
needs: CI
runs-on: ubuntu-latest
@@ -89,7 +120,7 @@ jobs:
sudo docker pull ${{ secrets.DOCKER_ID }}/${{ secrets.DOCKER_IMAGE }}:1.0
# ์คํฌ๋ฆฝํธ ์คํํ ๊ณณ์ผ๋ก ์ด๋
- cd /home/ubuntu/app
+ cd ${{ secrets.SSH_PWD }}
echo "docker_deploy.sh๋ฅผ ์คํํฉ๋๋ค."
chmod +x ./docker_deploy.sh
diff --git a/.github/workflows/schedule-pr.yml b/.github/workflows/schedule-pr.yml
deleted file mode 100644
index 7e13a881..00000000
--- a/.github/workflows/schedule-pr.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Schedule Pull Request
-
-on:
- # ๋งค์ผ 9์์ ์คํ ์์์ผ~๊ธ์์ผ
- schedule:
- - cron: '0 0 * * 1-5'
-
-jobs:
- create-pull-request:
- name: RP ์์ฒญ
- runs-on: ubuntu-latest
-
- steps:
- # ๋ํฌ ์ฒดํฌ
- - name: ์ฒดํฌ์์ ๋ํฌ
- uses: actions/checkout@v4
- # ๊น ํ๋ธ ๋ช
๋ น
- - name: ๋ช
๋ น ์
ํ
- uses: actions/setup-node@v4
- with:
- node-version: '16'
-
- # PR ์์ฑ
- - name: Create Pull Request
- env:
- GITHUB_TOKEN: ${{ secrets.TOKEN_SCHEDULE }}
- run: |
- # Pull latest changes
- git fetch origin
-
- # Ensure develop branch is up to date
- git checkout develop
- git pull origin develop
-
- # Create Pull Request using GitHub CLI
- gh pr create \
- --base main \
- --head develop \
- --title "Daily PR: develop -> main" \
- --body "10์ PR ์
๋๋ค."
diff --git a/.gitignore b/.gitignore
index 02d935e5..4a03e239 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
# Created by https://www.toptal.com/developers/gitignore/api/intellij,gradle,java,linux,git,macos,windows
# Edit at https://www.toptal.com/developers/gitignore?templates=intellij,gradle,java,linux,git,macos,windows
+# github actions ์ํฌ๋ฆฟ๋ณ์ ํ์ผ
+5re5.secrets
### dotenv ###
.env
diff --git a/README.md b/README.md
index a92456fc..c7767de0 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,609 @@
-# README.md
+# 5RE5 PARK
+
+
+
+
+
+
+
+
+## ํ๋ก์ ํธ ์๊ฐ
+
+
+
+
+### ๐๐ป ํ๋ก์ ํธ ๊ธฐ๊ฐ (54 days)
+> **์ ์ฒด ๊ฐ๋ฐ ๊ธฐ๊ฐ: ( 8 Weeks | 45 %)**
+> - ๊ธฐ๋ฅ ๊ตฌํ ๊ธฐ๊ฐ: ( 5 Weeks | 60 %)
+> - ๋ฐํ ์ค๋น ๊ธฐ๊ฐ: 3 days
+
+
+
+### ๐ป ์ฝ๋์
+
+Java : 33,731
+
+
+
|
|
+
+
|
|
|
|
|
+
+#### Database
+|MySQL|
+|:---:|
+|
|
+
+#### Web Server
+|Apache Tomcat| AWS | RDS |Prometheus|Grafana|Docker| Compose |GitHub Action|
+|:---:|:--------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|:---:|:---:|:---:|:--------------------------------------------------------:|:---:|
+|
|
|
|
|
|
|
+
+
|
|
|
+
+- ์ ๋ชฉ ํ ๋ช
๋ น๋ฌธ ์ฌ์ฉ
+- ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๋น ํ์ผ๋ก ๋ถ๋ฆฌ
+- ์ ๋ชฉ ํ ๊ธ์ ์ 50์ ์ดํ
+- ์ ๋ชฉ ํ ๋์ ๋ง์นจํ ์์
+
+### ๐ ์ ํ
+
+
+[feat] : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
+[test] : ํ
์คํธ ์ฝ๋ ์๋ฃ
+[refactor] : ๋ฆฌํฉํ ๋ง, ์ฝ๋ ๊ฐ์
+[fix] : ๋ฒ๊ทธ ์์
+[docs] : ๋ฌธ์ ์ถ๊ฐ ๋๋ ์์ (ex. README ๋ณ๊ฒฝ)
+[style] : ์ฝ๋ ์คํ์ผ ๋ณ๊ฒฝ (ํฌ๋งทํ
, ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ ๋ฑ ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ)
+[chore] : ํจํค์ง ๋งค๋์ (ex. gitignore ์์ ), ๋น๋ ์
๋ฌด ์์
+[comment] : ์ฃผ์ ์ถ๊ฐ ๋ฐ ์์
+[rename] : ํ์ผ ๋๋ ํด๋๋ช
์ ์์ ํ๊ฑฐ๋ ์ด๋ํ๋ ์์
๋ง ์ํํ ๊ฒฝ์ฐ
+[remove] : ํ์ผ์ ์ญ์ ํ๋ ์์
๋ง ์ํํ ๊ฒฝ์ฐ
+[conflict] : ํฉ๋ณ ์ ๋ฐ์ํ ์ถฉ๋ ์์
+
+
+## ์ํคํ
์ณ
+
+
+## ๐ญ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
+
+src
+โโโ main
+โย ย โโโ java
+โย ย โย ย โโโ com
+โย ย โย ย โโโ oreo
+โย ย โย ย โโโ finalproject_5re5_be
+โย ย โย ย โโโ FinalProject5Re5BeApplication.java
+โย ย โย ย โโโ code
+โย ย โย ย โย ย โโโ controller
+โย ย โย ย โย ย โย ย โโโ CodeController.java
+โย ย โย ย โย ย โย ย โโโ advice
+โย ย โย ย โย ย โย ย โโโ CodeExceptionHandler.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ CodeRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ CodeUpdateRequest.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ CodeResponse.java
+โย ย โย ย โย ย โย ย โโโ CodeResponses.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ Code.java
+โย ย โย ย โย ย โโโ exeption
+โย ย โย ย โย ย โย ย โโโ CodeDuplicatedException.java
+โย ย โย ย โย ย โย ย โโโ CodeNotFoundException.java
+โย ย โย ย โย ย โโโ repository
+โย ย โย ย โย ย โย ย โโโ CodeRepository.java
+โย ย โย ย โย ย โโโ service
+โย ย โย ย โย ย โโโ CodeServiceImpl.java
+โย ย โย ย โโโ concat
+โย ย โย ย โย ย โโโ config
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ controller
+โย ย โย ย โย ย โย ย โโโ AudioFileController.java
+โย ย โย ย โย ย โย ย โโโ BgmFileController.java
+โย ย โย ย โย ย โย ย โโโ ConcatController.java
+โย ย โย ย โย ย โย ย โโโ ConcatMaterialController.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowController.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowTabController.java
+โย ย โย ย โย ย โย ย โโโ ConcatTabController.java
+โย ย โย ย โย ย โย ย โโโ ConcatWithBgmController.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ ConcatResponseDto.java
+โย ย โย ย โย ย โย ย โโโ ConcatResultDto.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowDto.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowListDto.java
+โย ย โย ย โย ย โย ย โโโ RowAudioFileDto.java
+โย ย โย ย โย ย โย ย โโโ RowInfoDto.java
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ AudioFileDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ AudioFileRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ AudioFormatRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ BgmFunctionRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatCreateRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatResultRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatRowRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatRowRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatRowSaveRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatTabRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ ConcatUpdateRequestDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ OriginAudioRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โย ย โย ย โโโ SelectedConcatRowRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ TabRowUpdateRequestDto.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ ConcatResultDetailsResponse.java
+โย ย โย ย โย ย โย ย โโโ ConcatResultResponse.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowTabResponseDto.java
+โย ย โย ย โย ย โย ย โโโ ConcatTabResponseDto.java
+โย ย โย ย โย ย โย ย โโโ ConcatUrlResponse.java
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โย ย โโโ TabRowResponseDto.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ AudioFile.java
+โย ย โย ย โย ย โย ย โโโ BgmFile.java
+โย ย โย ย โย ย โย ย โโโ ConcatResult.java
+โย ย โย ย โย ย โย ย โโโ ConcatRow.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowLog.java
+โย ย โย ย โย ย โย ย โโโ ConcatTab.java
+โย ย โย ย โย ย โย ย โโโ ConcatTabLog.java
+โย ย โย ย โย ย โย ย โโโ MaterialAudio.java
+โย ย โย ย โย ย โโโ exception
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ repository
+โย ย โย ย โย ย โย ย โโโ AudioFileRepository.java
+โย ย โย ย โย ย โย ย โโโ BgmFileRepository.java
+โย ย โย ย โย ย โย ย โโโ ConcatResultRepository.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowLogRepository.java
+โย ย โย ย โย ย โย ย โโโ ConcatRowRepository.java
+โย ย โย ย โย ย โย ย โโโ ConcatTabLogRepository.java
+โย ย โย ย โย ย โย ย โโโ ConcatTabRepository.java
+โย ย โย ย โย ย โย ย โโโ MaterialAudioRepository.java
+โย ย โย ย โย ย โโโ service
+โย ย โย ย โย ย โโโ AudioFileService.java
+โย ย โย ย โย ย โโโ AudioMultipartFile.java
+โย ย โย ย โย ย โโโ AudioStreamService.java
+โย ย โย ย โย ย โโโ BgmFileService.java
+โย ย โย ย โย ย โโโ ConcatResultService.java
+โย ย โย ย โย ย โโโ ConcatRowService.java
+โย ย โย ย โย ย โโโ ConcatRowTabService.java
+โย ย โย ย โย ย โโโ ConcatService.java
+โย ย โย ย โย ย โโโ ConcatTabService.java
+โย ย โย ย โย ย โโโ MaterialAudioService.java
+โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ bgm
+โย ย โย ย โย ย โย ย โโโ BgmProcessor.java
+โย ย โย ย โย ย โโโ concatenator
+โย ย โย ย โย ย โย ย โโโ AudioProperties.java
+โย ย โย ย โย ย โย ย โโโ Concatenator.java
+โย ย โย ย โย ย โย ย โโโ IntervalConcatenator.java
+โย ย โย ย โย ย โย ย โโโ MonoConcatenator.java
+โย ย โย ย โย ย โย ย โโโ MonoIntervalConcatenator.java
+โย ย โย ย โย ย โย ย โโโ StereoConcatenator.java
+โย ย โย ย โย ย โย ย โโโ StereoIntervalConcatenator.java
+โย ย โย ย โย ย โโโ helper
+โย ย โย ย โย ย โโโ AudioFileHelper.java
+โย ย โย ย โย ย โโโ ConcatRowHelper.java
+โย ย โย ย โย ย โโโ ConcatTabHelper.java
+โย ย โย ย โโโ global
+โย ย โย ย โย ย โโโ component
+โย ย โย ย โย ย โย ย โโโ AudioInfo.java
+โย ย โย ย โย ย โย ย โโโ ByteArrayMultipartFile.java
+โย ย โย ย โย ย โย ย โโโ S3Service.java
+โย ย โย ย โย ย โย ย โโโ SqsService.java
+โย ย โย ย โย ย โย ย โโโ audio
+โย ย โย ย โย ย โย ย โโโ AudioChannels.java
+โย ย โย ย โย ย โย ย โโโ AudioExtensionChecker.java
+โย ย โย ย โย ย โย ย โโโ AudioExtensionConverter.java
+โย ย โย ย โย ย โย ย โโโ AudioExtensions.java
+โย ย โย ย โย ย โย ย โโโ AudioFileTypeConverter.java
+โย ย โย ย โย ย โย ย โโโ AudioFormats.java
+โย ย โย ย โย ย โย ย โโโ AudioResample.java
+โย ย โย ย โย ย โย ย โโโ BeepMaker.java
+โย ย โย ย โย ย โย ย โโโ SoundPlayer.java
+โย ย โย ย โย ย โโโ config
+โย ย โย ย โย ย โย ย โโโ AuditorAwareImpl.java
+โย ย โย ย โย ย โย ย โโโ JpaAuditingConfig.java
+โย ย โย ย โย ย โย ย โโโ MultipartFileAccepter.java
+โย ย โย ย โย ย โย ย โโโ S3Config.java
+โย ย โย ย โย ย โย ย โโโ SqsConfig.java
+โย ย โย ย โย ย โย ย โโโ SwaggerConfig.java
+โย ย โย ย โย ย โโโ constant
+โย ย โย ย โย ย โย ย โโโ BatchProcessType.java
+โย ย โย ย โย ย โย ย โโโ MessageType.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ SqsRequestDto.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ AudioFileInfo.java
+โย ย โย ย โย ย โย ย โโโ ErrorResponseDto.java
+โย ย โย ย โย ย โย ย โโโ ResponseDto.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ BaseEntity.java
+โย ย โย ย โย ย โโโ error
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ exception
+โย ย โย ย โย ย โโโ BusinessException.java
+โย ย โย ย โย ย โโโ DataNotFoundException.java
+โย ย โย ย โย ย โโโ EntityNotFoundException.java
+โย ย โย ย โย ย โโโ ErrorCode.java
+โย ย โย ย โย ย โโโ GlobalExceptionHandler.java
+โย ย โย ย โย ย โโโ InValidValueException.java
+โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ RestGlobalExceptionHandler.java
+โย ย โย ย โโโ member
+โย ย โย ย โย ย โโโ config
+โย ย โย ย โย ย โย ย โโโ LoginAuthenticationFailureHandler.java
+โย ย โย ย โย ย โย ย โโโ LoginAuthenticationSuccessHandler.java
+โย ย โย ย โย ย โย ย โโโ MemberConfig.java
+โย ย โย ย โย ย โย ย โโโ MemberSecurityConfig.java
+โย ย โย ย โย ย โโโ controller
+โย ย โย ย โย ย โย ย โโโ MemberController.java
+โย ย โย ย โย ย โย ย โโโ MemberTermConditionController.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsController.java
+โย ย โย ย โย ย โย ย โโโ TestController.java
+โย ย โย ย โย ย โย ย โโโ advice
+โย ย โย ย โย ย โย ย โโโ MemberExceptionHandler.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ CustomUserDetails.java
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ MemberChangePasswordRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberRegisterRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberRemoveRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberTermCheckOrNotRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberTermConditionRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberTermConditionUpdateRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberTermRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberTermUpdateRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ MemberUpdateRequest.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ ErrorResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberReadResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberRegisterResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberTermConditionResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberTermConditionResponses.java
+โย ย โย ย โย ย โย ย โโโ MemberTermResponse.java
+โย ย โย ย โย ย โย ย โโโ MemberTermResponses.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsDetailResponse.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ Member.java
+โย ย โย ย โย ย โย ย โโโ MemberCategory.java
+โย ย โย ย โย ย โย ย โโโ MemberChangeHistory.java
+โย ย โย ย โย ย โย ย โโโ MemberConnectionHistory.java
+โย ย โย ย โย ย โย ย โโโ MemberDelete.java
+โย ย โย ย โย ย โย ย โโโ MemberRoles.java
+โย ย โย ย โย ย โย ย โโโ MemberRolesCategory.java
+โย ย โย ย โย ย โย ย โโโ MemberState.java
+โย ย โย ย โย ย โย ย โโโ MemberTerms.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsCondition.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsHistory.java
+โย ย โย ย โย ย โโโ exception
+โย ย โย ย โย ย โย ย โโโ DeletedMemberException.java
+โย ย โย ย โย ย โย ย โโโ HumanMemberException.java
+โย ย โย ย โย ย โย ย โโโ MemberDuplicatedEmailException.java
+โย ย โย ย โย ย โย ย โโโ MemberDuplicatedIdException.java
+โย ย โย ย โย ย โย ย โโโ MemberDuplicatedPasswordException.java
+โย ย โย ย โย ย โย ย โโโ MemberInvalidTermConditionException.java
+โย ย โย ย โย ย โย ย โโโ MemberMandatoryTermNotAgreedException.java
+โย ย โย ย โย ย โย ย โโโ MemberNotFoundEmailException.java
+โย ย โย ย โย ย โย ย โโโ MemberNotFoundException.java
+โย ย โย ย โย ย โย ย โโโ MemberTermInvalidException.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsConditionNotFoundException.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsNotFoundException.java
+โย ย โย ย โย ย โย ย โโโ MemberWrongCountTermCondition.java
+โย ย โย ย โย ย โย ย โโโ RestrictedMemberException.java
+โย ย โย ย โย ย โย ย โโโ RetryFailedException.java
+โย ย โย ย โย ย โโโ repository
+โย ย โย ย โย ย โย ย โโโ MemberCategoryRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberChangeHistoryRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberConnectionHistoryRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberDeleteRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberStateRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberTermConditionRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsHistoryRepository.java
+โย ย โย ย โย ย โย ย โโโ MemberTermsRepository.java
+โย ย โย ย โย ย โโโ service
+โย ย โย ย โย ย โโโ MemberServiceImpl.java
+โย ย โย ย โย ย โโโ MemberTermsConditionServiceImpl.java
+โย ย โย ย โย ย โโโ MemberTermsServiceImpl.java
+โย ย โย ย โโโ project
+โย ย โย ย โย ย โโโ config
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ controller
+โย ย โย ย โย ย โย ย โโโ ProjectController.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ ProjectTextRequest.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ ProjectResponse.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ Project.java
+โย ย โย ย โย ย โย ย โโโ ProjectStatus.java
+โย ย โย ย โย ย โโโ exception
+โย ย โย ย โย ย โย ย โโโ InvalidProjectNameException.java
+โย ย โย ย โย ย โย ย โโโ ProjectExceptionHandler.java
+โย ย โย ย โย ย โย ย โโโ ProjectNotFoundException.java
+โย ย โย ย โย ย โย ย โโโ projectNotMemberException.java
+โย ย โย ย โย ย โโโ repository
+โย ย โย ย โย ย โย ย โโโ ProjectRepository.java
+โย ย โย ย โย ย โโโ service
+โย ย โย ย โย ย โโโ ProjectService.java
+โย ย โย ย โย ย โโโ ProjectServiceImpl.java
+โย ย โย ย โโโ tts
+โย ย โย ย โย ย โโโ client
+โย ย โย ย โย ย โย ย โโโ AudioConfigGenerator.java
+โย ย โย ย โย ย โย ย โโโ GoogleTTSConfig.java
+โย ย โย ย โย ย โย ย โโโ GoogleTTSService.java
+โย ย โย ย โย ย โย ย โโโ SynthesisInputGenerator.java
+โย ย โย ย โย ย โย ย โโโ VoiceParamsGenerator.java
+โย ย โย ย โย ย โโโ config
+โย ย โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โย ย โโโ controller
+โย ย โย ย โย ย โย ย โโโ LanguageController.java
+โย ย โย ย โย ย โย ย โโโ StyleController.java
+โย ย โย ย โย ย โย ย โโโ TtsController.java
+โย ย โย ย โย ย โย ย โโโ VoiceController.java
+โย ย โย ย โย ย โโโ dto
+โย ย โย ย โย ย โย ย โโโ external
+โย ย โย ย โย ย โย ย โย ย โโโ TtsMakeRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsMakeResponse.java
+โย ย โย ย โย ย โย ย โย ย โโโ common
+โย ย โย ย โย ย โย ย โย ย โโโ AudioOptionDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsSentenceDto.java
+โย ย โย ย โย ย โย ย โย ย โโโ VoiceDto.java
+โย ย โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โย ย โโโ TtsAttributeInfo.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsAudioFileInfo.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsSentenceBatchInfo.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsSentenceBatchRequest.java
+โย ย โย ย โย ย โย ย โย ย โโโ TtsSentenceRequest.java
+โย ย โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โย ย โโโ LanguageDto.java
+โย ย โย ย โย ย โย ย โโโ LanguageListDto.java
+โย ย โย ย โย ย โย ย โโโ SentenceInfo.java
+โย ย โย ย โย ย โย ย โโโ StyleDto.java
+โย ย โย ย โย ย โย ย โโโ StyleListDto.java
+โย ย โย ย โย ย โย ย โโโ TtsProgressStatusDto.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceDto.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceListDto.java
+โย ย โย ย โย ย โย ย โโโ VoiceDto.java
+โย ย โย ย โย ย โย ย โโโ VoiceListDto.java
+โย ย โย ย โย ย โโโ entity
+โย ย โย ย โย ย โย ย โโโ Language.java
+โย ย โย ย โย ย โย ย โโโ SampleAudio.java
+โย ย โย ย โย ย โย ย โโโ ServerCode.java
+โย ย โย ย โย ย โย ย โโโ Style.java
+โย ย โย ย โย ย โย ย โโโ TtsAudioFile.java
+โย ย โย ย โย ย โย ย โโโ TtsProcessHistory.java
+โย ย โย ย โย ย โย ย โโโ TtsProgressStatus.java
+โย ย โย ย โย ย โย ย โโโ TtsProgressStatusCode.java
+โย ย โย ย โย ย โย ย โโโ TtsSentence.java
+โย ย โย ย โย ย โย ย โโโ Voice.java
+โย ย โย ย โย ย โโโ exception
+โย ย โย ย โย ย โย ย โโโ DuplicatedSentenceException.java
+โย ย โย ย โย ย โย ย โโโ InValidRequestException.java
+โย ย โย ย โย ย โย ย โโโ InvalidTTSParamException.java
+โย ย โย ย โย ย โย ย โโโ ProjectMismatchException.java
+โย ย โย ย โย ย โย ย โโโ SaveTtsMakeResultException.java
+โย ย โย ย โย ย โย ย โโโ TtsMakeException.java
+โย ย โย ย โย ย โย ย โโโ TtsMakeInvalidParamException.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceInValidInput.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceNotFound.java
+โย ย โย ย โย ย โย ย โโโ VoiceEntityNotFound.java
+โย ย โย ย โย ย โโโ repository
+โย ย โย ย โย ย โย ย โโโ LanguageRepository.java
+โย ย โย ย โย ย โย ย โโโ SampleAudioRepository.java
+โย ย โย ย โย ย โย ย โโโ StyleRepository.java
+โย ย โย ย โย ย โย ย โโโ TtsAudioFileRepository.java
+โย ย โย ย โย ย โย ย โโโ TtsProcessHistoryRepository.java
+โย ย โย ย โย ย โย ย โโโ TtsProgressStatusRepository.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceRepository.java
+โย ย โย ย โย ย โย ย โโโ VoiceRepository.java
+โย ย โย ย โย ย โโโ service
+โย ย โย ย โย ย โย ย โโโ LanguageService.java
+โย ย โย ย โย ย โย ย โโโ SaveTtsMakeResultService.java
+โย ย โย ย โย ย โย ย โโโ StyleService.java
+โย ย โย ย โย ย โย ย โโโ TtsMakeService.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceService.java
+โย ย โย ย โย ย โย ย โโโ TtsSentenceServiceImpl.java
+โย ย โย ย โย ย โย ย โโโ VoiceService.java
+โย ย โย ย โย ย โโโ util
+โย ย โย ย โย ย โโโ TtsSentenceComparator.java
+โย ย โย ย โโโ vc
+โย ย โย ย โโโ config
+โย ย โย ย โย ย โโโ README.md
+โย ย โย ย โโโ controller
+โย ย โย ย โย ย โโโ VcController.java
+โย ย โย ย โโโ dto
+โย ย โย ย โย ย โโโ request
+โย ย โย ย โย ย โย ย โโโ VcAudioRequest.java
+โย ย โย ย โย ย โย ย โโโ VcRequestHistoryRequest.java
+โย ย โย ย โย ย โย ย โโโ VcResultHistoryRequest.java
+โย ย โย ย โย ย โย ย โโโ VcResultsRequest.java
+โย ย โย ย โย ย โย ย โโโ VcRowRequest.java
+โย ย โย ย โย ย โย ย โโโ VcSrcRequest.java
+โย ย โย ย โย ย โย ย โโโ VcSrcsRequest.java
+โย ย โย ย โย ย โย ย โโโ VcTextRequest.java
+โย ย โย ย โย ย โย ย โโโ VcUrlRequest.java
+โย ย โย ย โย ย โโโ response
+โย ย โย ย โย ย โโโ VcActivateResponse.java
+โย ย โย ย โย ย โโโ VcResponse.java
+โย ย โย ย โย ย โโโ VcRowResponse.java
+โย ย โย ย โย ย โโโ VcTextResponse.java
+โย ย โย ย โย ย โโโ VcUrlResponse.java
+โย ย โย ย โโโ entity
+โย ย โย ย โย ย โโโ Vc.java
+โย ย โย ย โย ย โโโ VcRequestHistory.java
+โย ย โย ย โย ย โโโ VcResultFile.java
+โย ย โย ย โย ย โโโ VcResultHistory.java
+โย ย โย ย โย ย โโโ VcSrcFile.java
+โย ย โย ย โย ย โโโ VcText.java
+โย ย โย ย โย ย โโโ VcTrgFile.java
+โย ย โย ย โโโ exception
+โย ย โย ย โย ย โโโ VcAPIFilesIsEmptyException.java
+โย ย โย ย โย ย โโโ VcExceptionHandler.java
+โย ย โย ย โย ย โโโ VcNotMemberException.java
+โย ย โย ย โโโ repository
+โย ย โย ย โย ย โโโ VcRepository.java
+โย ย โย ย โย ย โโโ VcRequestHistoryRepository.java
+โย ย โย ย โย ย โโโ VcResultFileRepository.java
+โย ย โย ย โย ย โโโ VcResultHistoryRepository.java
+โย ย โย ย โย ย โโโ VcSrcFileRepository.java
+โย ย โย ย โย ย โโโ VcTextRepository.java
+โย ย โย ย โย ย โโโ VcTrgFileRepository.java
+โย ย โย ย โโโ service
+โย ย โย ย โโโ VcApiService.java
+โย ย โย ย โโโ VcApiServiceImpl.java
+โย ย โย ย โโโ VcHistoryService.java
+โย ย โย ย โโโ VcHistoryServiceImpl.java
+โย ย โย ย โโโ VcService.java
+โย ย โย ย โโโ VcServiceImpl.java
+โย ย โโโ resources
+โย ย โโโ application-ndb-test.properties
+โย ย โโโ application-test.properties
+โย ย โโโ application.properties
+โย ย โโโ tts.json
+โโโ test
+ โโโ java
+ โโโ com
+ โโโ oreo
+ โโโ finalproject_5re5_be
+ โโโ FinalProject5Re5BeApplicationTests.java
+ โโโ audio
+ โย ย โโโ AudioExtensionCheckerTest.java
+ โย ย โโโ AudioExtensionConverterTest.java
+ โย ย โโโ AudioExtensionsTest.java
+ โย ย โโโ AudioResampleTest.java
+ โย ย โโโ BeepMakerTest.java
+ โย ย โโโ MonoConcatenatorTest.java
+ โย ย โโโ MonoIntervalConcatenatorTest.java
+ โย ย โโโ SoundPlayerTest.java
+ โย ย โโโ StereoConcatenatorTest.java
+ โย ย โโโ StereoIntervalConcatenatorTest.java
+ โย ย โโโ service
+ โย ย โโโ AudioInfoTest.java
+ โโโ concat
+ โย ย โโโ repository
+ โย ย โย ย โโโ MaterialAudioRepositoryTest.java
+ โย ย โโโ service
+ โย ย โโโ ConcatTabServiceTest.java
+ โโโ member
+ โย ย โโโ config
+ โย ย โย ย โโโ LoginAuthenticationSuccessHandlerTest.java
+ โย ย โย ย โโโ MemberSecurityConfigTest.java
+ โย ย โโโ controller
+ โย ย โย ย โโโ CodeControllerTest.java
+ โย ย โย ย โโโ MemberControllerTest.java
+ โย ย โย ย โโโ MemberTermConditionControllerTest.java
+ โย ย โย ย โโโ MemberTermsControllerTest.java
+ โย ย โโโ repository
+ โย ย โย ย โโโ CodeRepositoryTest.java
+ โย ย โย ย โโโ MemberChangeHistoryRepositoryTest.java
+ โย ย โย ย โโโ MemberRepositoryTest.java
+ โย ย โย ย โโโ MemberTermConditionRepositoryTest.java
+ โย ย โย ย โโโ MemberTermsRepositoryTest.java
+ โย ย โโโ service
+ โย ย โโโ CodeServiceImplTest.java
+ โย ย โโโ MemberServiceImplTest.java
+ โย ย โโโ MemberServiceImplTestByMock.java
+ โย ย โโโ MemberTermsConditionServiceImplTest.java
+ โย ย โโโ MemberTermsServiceImplTest.java
+ โโโ project
+ โย ย โโโ service
+ โย ย โโโ ProjectServiceImplTest.java
+ โโโ tts
+ โย ย โโโ client
+ โย ย โย ย โโโ GoogleTTSServiceTest.java
+ โย ย โโโ controller
+ โย ย โย ย โโโ LanguageControllerTest.java
+ โย ย โย ย โโโ StyleControllerTest.java
+ โย ย โย ย โโโ VoiceControllerTest.java
+ โย ย โย ย โโโ ttsController
+ โย ย โย ย โโโ TestGetSentence.java
+ โย ย โย ย โโโ TestGetSentenceList.java
+ โย ย โย ย โโโ TestMakeTts.java
+ โย ย โย ย โโโ TestRegisterSentence.java
+ โย ย โย ย โโโ TestUpdateSentence.java
+ โย ย โโโ repository
+ โย ย โย ย โโโ LanguageRepositoryTest.java
+ โย ย โย ย โโโ SampleAudioRepositoryTest.java
+ โย ย โย ย โโโ StyleRepositoryTest.java
+ โย ย โย ย โโโ TtsAudioFileRepositoryTest.java
+ โย ย โย ย โโโ TtsProcessHistoryRepositoryTest.java
+ โย ย โย ย โโโ TtsProgressStatusRepositoryTest.java
+ โย ย โย ย โโโ TtsSentenceRepositoryTest.java
+ โย ย โย ย โโโ VoiceRepositoryFindTest.java
+ โย ย โย ย โโโ VoiceRepositoryTest.java
+ โย ย โโโ service
+ โย ย โโโ LanguageServiceTest.java
+ โย ย โโโ SaveTtsMakeResultTest.java
+ โย ย โโโ StyleServiceTest.java
+ โย ย โโโ TtsMakeServiceTest.java
+ โย ย โโโ VoiceServiceTest.java
+ โย ย โโโ ttsSentenceService
+ โย ย โโโ TestAddSentence.java
+ โย ย โโโ TestBatchSave.java
+ โย ย โโโ TestGetSentence.java
+ โย ย โโโ TestGetSentenceList.java
+ โย ย โโโ TestPatchSentenceOrder.java
+ โย ย โโโ TestUpdateSentence.java
+ โโโ vc
+ โโโ controller
+ โย ย โโโ VcControllerTest.java
+ โโโ repository
+ โย ย โโโ VcSrcFileRepositoryTest.java
+ โโโ service
+ โโโ VcApiServiceImplTest.java
+ โโโ VcServiceImplTest.java
+
+
+
+ {
Code findCodeByCodeSeq(Long codeSeq);
// ๊ฐ ํํธ๋ณ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์กฐํ.
- @Query( "SELECT c " +
- "FROM Code c " +
- "WHERE c.cateNum = :cateNum " +
- "AND c.chkUse = 'Y' " +
- "ORDER BY c.ord")
+ @Query(
+ "SELECT c "
+ + "FROM Code c "
+ + "WHERE c.cateNum = :cateNum "
+ + "AND c.chkUse = 'Y' "
+ + "ORDER BY c.ord")
List findAvailableCodesByCateNum(String cateNum);
// ๊ฐ ํํธ๋ณ๋ก ๋ชจ๋ ์ฝ๋๋ฅผ ์กฐํ.
- @Query( "SELECT c " +
- "FROM Code c " +
- "WHERE c.cateNum = :cateNum " +
- "ORDER BY c.ord")
+ @Query("SELECT c " + "FROM Code c " + "WHERE c.cateNum = :cateNum " + "ORDER BY c.ord")
List findCodesByCateNum(String cateNum);
// ์ฝ๋ ๋ฒํธ๋ก ์ฝ๋๊ฐ ์กด์ฌํ๋์ง ํ์ธ.
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/code/service/CodeServiceImpl.java b/src/main/java/com/oreo/finalproject_5re5_be/code/service/CodeServiceImpl.java
index 95440ed2..456bd5b5 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/code/service/CodeServiceImpl.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/code/service/CodeServiceImpl.java
@@ -1,6 +1,5 @@
package com.oreo.finalproject_5re5_be.code.service;
-
import com.oreo.finalproject_5re5_be.code.dto.request.CodeRequest;
import com.oreo.finalproject_5re5_be.code.dto.request.CodeUpdateRequest;
import com.oreo.finalproject_5re5_be.code.dto.response.CodeResponse;
@@ -45,9 +44,7 @@ public CodeResponses readAll() {
// ๋ชจ๋ ์ฝ๋ ์ํฐํฐ๋ฅผ ์กฐํ
List foundCodes = codeRepository.findAll();
// ๋ฆฌ์คํธ๋ก ๋ณํ
- List codeResponseList = foundCodes.stream()
- .map(CodeResponse::of)
- .toList();
+ List codeResponseList = foundCodes.stream().map(CodeResponse::of).toList();
// ์กฐํ๋ ์ํฐํฐ๋ฅผ response๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค
return CodeResponses.of(codeResponseList);
@@ -69,15 +66,12 @@ public CodeResponse read(String code) {
return CodeResponse.of(foundCode);
}
-
// ๊ฐ ํํธ๋ณ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ์กฐํ
public CodeResponses readAvailableCodeByCateNum(String cateNum) {
// ์ ๋ฌ ๋ฐ์ ํํธ์ ํด๋นํ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ฝ๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ค
List foundCodes = codeRepository.findAvailableCodesByCateNum(cateNum);
// ๋ฆฌ์คํธ์ ๋ด๋๋ค
- List codeResponseList = foundCodes.stream()
- .map(CodeResponse::of)
- .toList();
+ List codeResponseList = foundCodes.stream().map(CodeResponse::of).toList();
// ์กฐํ๋ ์ํฐํฐ๋ฅผ responses๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค
return CodeResponses.of(codeResponseList);
}
@@ -87,14 +81,11 @@ public CodeResponses readAllByCateNum(String cateNum) {
// ์ ๋ฌ ๋ฐ์ ํํธ์ ํด๋นํ๋ ๋ชจ๋ ์ฝ๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ค
List foundCodes = codeRepository.findCodesByCateNum(cateNum);
// ๋ฆฌ์คํธ์ ๋ด๋๋ค
- List codeResponseList = foundCodes.stream()
- .map(CodeResponse::of)
- .toList();
+ List codeResponseList = foundCodes.stream().map(CodeResponse::of).toList();
// ์กฐํ๋ ์ํฐํฐ๋ฅผ responses๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค
return CodeResponses.of(codeResponseList);
}
-
// ์ฝ๋ ์์
public void update(Long codeSeq, CodeUpdateRequest request) {
// ์ํ์ค๋ก ํน์ ์ฝ๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ค
@@ -124,5 +115,4 @@ public void delete(Long codeSeq) {
// ์กฐํ๋ ์ํฐํฐ๋ฅผ ์ญ์ ํ๋ค
codeRepository.delete(foundCode);
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/config/RestTemplateConfig.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/config/RestTemplateConfig.java
new file mode 100644
index 00000000..4ce37423
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/config/RestTemplateConfig.java
@@ -0,0 +1,14 @@
+package com.oreo.finalproject_5re5_be.concat.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfig {
+
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/AudioFileController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/AudioFileController.java
index faccc50d..500061ea 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/AudioFileController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/AudioFileController.java
@@ -11,6 +11,9 @@
import com.oreo.finalproject_5re5_be.project.service.ProjectService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.IOException;
+import java.util.List;
+import javax.sound.sampled.UnsupportedAudioFileException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@@ -24,10 +27,6 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import java.io.IOException;
-import java.util.List;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
@RequiredArgsConstructor
@@ -38,12 +37,9 @@ public class AudioFileController {
private final ConcatRowService concatRowService;
private final MaterialAudioService materialAudioService;
-
- @Operation(
- summary = "์
๋ก๋ ํ ์ค๋์ค ํ์ ๊ฒ์ฌ",
- description = "์
๋ก๋ ํ ์ ์๋ ์ค๋์ค ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค."
- )
- @PostMapping(value = "extension/check",
+ @Operation(summary = "์
๋ก๋ ํ ์ค๋์ค ํ์ ๊ฒ์ฌ", description = "์
๋ก๋ ํ ์ ์๋ ์ค๋์ค ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.")
+ @PostMapping(
+ value = "extension/check",
consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity>> check(
@@ -55,64 +51,63 @@ public ResponseEntity>> check(
return buildResponse(status, audioFileRequestDtos);
}
- @Operation(
- summary = "์ค๋์ค ์
๋ก๋",
- description = "์
๋ก๋ํ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค."
- )
- @PostMapping(value = "save",
+ @Operation(summary = "์ค๋์ค ์
๋ก๋", description = "์
๋ก๋ํ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.")
+ @PostMapping(
+ value = "save",
consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity>> save(
- @RequestParam("audio") List audioFiles) throws IOException, UnsupportedAudioFileException {
+ @RequestParam("audio") List audioFiles)
+ throws IOException, UnsupportedAudioFileException {
List audioDto = convertToDto(audioFiles);
List originAudioRequests = audioFileService.saveAudioFile(audioDto);
return buildResponse(HttpStatus.OK, originAudioRequests);
}
- @Operation(
- summary = "ํ์ ์์ด๋์ ์ ์ฅ๋ ์ค๋์ค ๋ถ๋ฌ์ค๊ธฐ",
- description = "์
๋ก๋ ๋ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "ํ์ ์์ด๋์ ์ ์ฅ๋ ์ค๋์ค ๋ถ๋ฌ์ค๊ธฐ", description = "์
๋ก๋ ๋ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.")
@PostMapping("read")
- public ResponseEntity>> read(@RequestParam List concatRowSeq,
- @AuthenticationPrincipal CustomUserDetails userDetails) {
- concatRowSeq.forEach(seq -> {
- Long projectId = concatRowService.readConcatRow(seq).getConcatTab().getProjectId();
- projectService.projectCheck(userDetails.getMember().getSeq(), projectId);
- });
+ public ResponseEntity>> read(
+ @RequestParam List concatRowSeq,
+ @AuthenticationPrincipal CustomUserDetails userDetails) {
+ concatRowSeq.forEach(
+ seq -> {
+ Long projectId = concatRowService.readConcatRow(seq).getConcatTab().getProjectId();
+ projectService.checkProject(userDetails.getMember().getSeq(), projectId);
+ });
concatRowSeq.sort(Long::compareTo);
List audioFileList = audioFileService.findByConcatRowSeq(concatRowSeq);
return buildResponse(HttpStatus.OK, audioFileList);
}
- @Operation(
- summary = "์ฌ์ฉ์๊ฐ ์
๋ก๋ ํ ๋ชจ๋ ์ค๋์ค ํ์ผ์ ์กฐํํฉ๋๋ค.",
- description = "์
๋ก๋ ๋ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "์ฌ์ฉ์๊ฐ ์
๋ก๋ ํ ๋ชจ๋ ์ค๋์ค ํ์ผ์ ์กฐํํฉ๋๋ค.", description = "์
๋ก๋ ๋ ์ค๋์ค์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.")
@GetMapping("read/my/audio")
- public ResponseEntity>> readMyAudio(@AuthenticationPrincipal CustomUserDetails userDetails,
- @RequestParam int page,
- @RequestParam int size,
- @RequestParam String sort) {
+ public ResponseEntity>> readMyAudio(
+ @AuthenticationPrincipal CustomUserDetails userDetails,
+ @RequestParam int page,
+ @RequestParam int size,
+ @RequestParam String sort) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- String user = authentication.getPrincipal().toString();
+ String user = authentication.getPrincipal().toString();
System.out.println("user = " + user);
-
Sort.Direction direction = Sort.Direction.fromString(sort); // "ASC" ๋๋ "DESC"
- Pageable pageable = PageRequest.of(page, size, Sort.by(direction, "createdDate")); // "created_date"๊ฐ ์๋๋ผ ๋งคํ๋ ์ํฐํฐ ํ๋ ์ด๋ฆ ์ฌ์ฉ
- return buildResponse(HttpStatus.OK, audioFileService.getMemberAudioFile(userDetails.getMember().getSeq(), pageable));
+ Pageable pageable =
+ PageRequest.of(
+ page, size, Sort.by(direction, "createdDate")); // "created_date"๊ฐ ์๋๋ผ ๋งคํ๋ ์ํฐํฐ ํ๋ ์ด๋ฆ ์ฌ์ฉ
+ return buildResponse(
+ HttpStatus.OK,
+ audioFileService.getMemberAudioFile(userDetails.getMember().getSeq(), pageable));
}
@Operation(
summary = "์ ๋ฌ๋ฐ์ ํ์ด์ง ์ฌ์ด์ฆ๋ก ๊ณ์ฐํ ํ์ด์ง ๋ฐฐ์ด์ ๋ฐํ ํฉ๋๋ค.",
- description = "์ซ์ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ์ซ์๋ 0๋ถํฐ ์์ํฉ๋๋ค."
- )
+ description = "์ซ์ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ์ซ์๋ 0๋ถํฐ ์์ํฉ๋๋ค.")
@GetMapping("read/my/audio/pages")
- public ResponseEntity>> readMyAudioPages(@AuthenticationPrincipal CustomUserDetails userDetails,
- @RequestParam int size) {
- return buildResponse(HttpStatus.OK, audioFileService.getAudioFilePages(userDetails.getMember().getSeq(), size));
+ public ResponseEntity>> readMyAudioPages(
+ @AuthenticationPrincipal CustomUserDetails userDetails, @RequestParam int size) {
+ return buildResponse(
+ HttpStatus.OK, audioFileService.getAudioFilePages(userDetails.getMember().getSeq(), size));
}
private List convertToDto(List audioFiles) {
@@ -124,4 +119,4 @@ private List convertToDto(List audioFiles) {
private ResponseEntity> buildResponse(HttpStatus status, T data) {
return new ResponseEntity<>(new ResponseDto<>(status.value(), data), status);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/BgmFileController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/BgmFileController.java
index 866ece47..96796649 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/BgmFileController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/BgmFileController.java
@@ -2,6 +2,7 @@
import com.oreo.finalproject_5re5_be.concat.entity.BgmFile;
import com.oreo.finalproject_5re5_be.concat.service.BgmFileService;
+import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
@@ -9,9 +10,6 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.util.List;
-
-
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/bgms")
@@ -23,5 +21,4 @@ public ResponseEntity> getBgmFiles(@PathVariable Long tabSeq) {
List bgmFiles = bgmFileService.getBgmFilesByTabSeq(tabSeq);
return ResponseEntity.ok(bgmFiles);
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatController.java
index 4dc040fa..b3d6f368 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatController.java
@@ -1,76 +1,94 @@
package com.oreo.finalproject_5re5_be.concat.controller;
-
import com.oreo.finalproject_5re5_be.concat.dto.ConcatResultDto;
import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatRowRequestDto;
import com.oreo.finalproject_5re5_be.concat.dto.response.ConcatTabResponseDto;
import com.oreo.finalproject_5re5_be.concat.service.ConcatResultService;
-import com.oreo.finalproject_5re5_be.concat.service.ConcatService;
import com.oreo.finalproject_5re5_be.concat.service.ConcatTabService;
+import com.oreo.finalproject_5re5_be.concat.service.lambda.LambdaConcatService;
import com.oreo.finalproject_5re5_be.global.dto.response.ResponseDto;
import com.oreo.finalproject_5re5_be.member.dto.CustomUserDetails;
import com.oreo.finalproject_5re5_be.project.service.ProjectService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.IOException;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.concurrent.ExecutionException;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
-import java.io.IOException;
-import java.util.List;
-import java.util.NoSuchElementException;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
@RequiredArgsConstructor
@RequestMapping("api/concat")
public class ConcatController {
- private final ConcatService concatService;
+ private final LambdaConcatService lambdaConcatService;
private final ConcatTabService concatTabService;
private final ConcatResultService concatResultService;
private final ProjectService projectService;
- @Operation(
- summary = "์ค๋์ค ๋ณํฉ์ ์ํํฉ๋๋ค.",
- description = "๋ณํฉ์ด ์ฑ๊ณต ํ๋ค๋ฉด ์ ์ฅ๋ ์ค๋์ค ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "์ค๋์ค ๋ณํฉ์ ์ํํฉ๋๋ค.", description = "๋ณํฉ์ด ์ฑ๊ณต ํ๋ค๋ฉด ์ ์ฅ๋ ์ค๋์ค ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.")
@PostMapping("")
- public ResponseEntity> concat(@RequestBody ConcatRowRequestDto audioRequests,
- @RequestParam Long memberSeq) throws IOException {
- projectService.projectCheck(memberSeq, audioRequests.getConcatTabId());
+ public ResponseEntity>> concat(
+ @RequestBody ConcatRowRequestDto audioRequests,
+ @AuthenticationPrincipal CustomUserDetails customUserDetails)
+ throws IOException, ExecutionException, InterruptedException {
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(), audioRequests.getConcatTabId());
+
+ ConcatTabResponseDto concatTabResponseDto =
+ concatTabService.readConcatTab(
+ audioRequests.getConcatTabId(), customUserDetails.getMember().getSeq());
- ConcatTabResponseDto concatTabResponseDto
- = concatTabService.readConcatTab(audioRequests.getConcatTabId(), memberSeq);
- ConcatResultDto concat = concatService.concat(concatTabResponseDto, audioRequests);
- return new ResponseDto<>(HttpStatus.OK.value(), concat).toResponseEntity();
+ List concatResult =
+ lambdaConcatService.concatOnLambda(concatTabResponseDto, audioRequests);
+
+ return new ResponseDto<>(HttpStatus.OK.value(), concatResult).toResponseEntity();
}
- @Operation(
- summary = "์ค๋์ค ๊ฒฐ๊ณผ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ",
- description = "ํ๋ก์ ํธ ๋ฒํธ์ ํด๋นํ๋ ์ค๋์ค ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค."
- )
+ // @PostMapping("")
+ // public ResponseEntity> concat(@RequestBody ConcatRowRequestDto
+ // audioRequests,
+ // @AuthenticationPrincipal
+ // CustomUserDetails customUserDetails) throws IOException {
+ // projectService.projectCheck(customUserDetails.getMember().getSeq(),
+ // audioRequests.getConcatTabId());
+ //
+ // ConcatTabResponseDto concatTabResponseDto
+ // = concatTabService.readConcatTab(audioRequests.getConcatTabId(),
+ // customUserDetails.getMember().getSeq());
+ // ConcatResultDto concat = concatService.concat(concatTabResponseDto, audioRequests);
+ // return new ResponseDto<>(HttpStatus.OK.value(), concat).toResponseEntity();
+ // }
+
+ @Operation(summary = "์ค๋์ค ๊ฒฐ๊ณผ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ", description = "ํ๋ก์ ํธ ๋ฒํธ์ ํด๋นํ๋ ์ค๋์ค ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.")
@GetMapping("read/result")
- public ResponseEntity>> readConcatResult(@RequestParam Long projectSeq,
- @AuthenticationPrincipal CustomUserDetails userDetails) {
- projectService.projectCheck(userDetails.getMember().getSeq(), projectSeq);
+ public ResponseEntity>> readConcatResult(
+ @RequestParam Long projectSeq, @AuthenticationPrincipal CustomUserDetails userDetails) {
+ projectService.checkProject(userDetails.getMember().getSeq(), projectSeq);
- return new ResponseDto<>(HttpStatus.OK.value(), concatResultService.findByConcatTabSequence(projectSeq)).toResponseEntity();
+ return new ResponseDto<>(
+ HttpStatus.OK.value(), concatResultService.findByConcatTabSequence(projectSeq))
+ .toResponseEntity();
}
// IllegalArgumentException ์ฒ๋ฆฌ
@ExceptionHandler(IllegalArgumentException.class)
- public ResponseEntity> handleDataNotFoundException(IllegalArgumentException ex) {
+ public ResponseEntity> handleDataNotFoundException(
+ IllegalArgumentException ex) {
String errorMessage = ex.getMessage();
return new ResponseDto<>(HttpStatus.BAD_REQUEST.value(), errorMessage).toResponseEntity();
}
-
// NoSuchElementException ์ฒ๋ฆฌ
@ExceptionHandler(NoSuchElementException.class)
- public ResponseEntity> handleDataNotFoundException(NoSuchElementException ex) {
+ public ResponseEntity> handleDataNotFoundException(
+ NoSuchElementException ex) {
String errorMessage = ex.getMessage();
return new ResponseDto<>(HttpStatus.BAD_REQUEST.value(), errorMessage).toResponseEntity();
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatMaterialController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatMaterialController.java
index 462eeb8e..18c63f40 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatMaterialController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatMaterialController.java
@@ -13,6 +13,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
+import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -21,8 +22,6 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import java.util.List;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
@RequestMapping("/api/concat/audio/materials")
@@ -31,7 +30,8 @@ public class ConcatMaterialController {
private final MaterialAudioService materialAudioService;
private final ProjectService projectService;
- public ConcatMaterialController(MaterialAudioService materialAudioService, ProjectService projectService) {
+ public ConcatMaterialController(
+ MaterialAudioService materialAudioService, ProjectService projectService) {
this.materialAudioService = materialAudioService;
this.projectService = projectService;
}
@@ -41,35 +41,39 @@ public ConcatMaterialController(MaterialAudioService materialAudioService, Proje
public ResponseEntity> getAllMaterialsByResultSeq(
@RequestParam("concatresultseq") Long concatResultSeq,
@AuthenticationPrincipal CustomUserDetails userDetails) {
- projectService.projectCheck(userDetails.getMember().getSeq(), concatResultSeq);
+ projectService.checkProject(userDetails.getMember().getSeq(), concatResultSeq);
// ConcatResult์์ ๊ฒฐ๊ณผ ํ์ผ URL ์กฐํ
- String resultAudioUrl = materialAudioService.findResultAudioUrlByConcatResultSeq(concatResultSeq);
+ String resultAudioUrl =
+ materialAudioService.findResultAudioUrlByConcatResultSeq(concatResultSeq);
// BGM ํ์ผ ์กฐํ
BgmFile bgmFile = materialAudioService.findBgmFileByConcatResultSeq(concatResultSeq);
OriginAudioRequest bgmFileResponse = null;
if (bgmFile != null) {
- bgmFileResponse = OriginAudioRequest.builder()
- .seq(bgmFile.getBgmFileSeq())
- .audioUrl(bgmFile.getAudioUrl())
- .extension(bgmFile.getExtension())
- .fileSize(bgmFile.getFileSize())
- .fileLength(bgmFile.getFileLength())
- .fileName(bgmFile.getFileName())
- .build();
+ bgmFileResponse =
+ OriginAudioRequest.builder()
+ .seq(bgmFile.getBgmFileSeq())
+ .audioUrl(bgmFile.getAudioUrl())
+ .extension(bgmFile.getExtension())
+ .fileSize(bgmFile.getFileSize())
+ .fileLength(bgmFile.getFileLength())
+ .fileName(bgmFile.getFileName())
+ .build();
}
// ์ฌ๋ฃ ์ค๋์ค ํ์ผ ์กฐํ
- List materialAudioFiles = materialAudioService.findMaterialAudioFilesByConcatResultSeq(concatResultSeq);
+ List materialAudioFiles =
+ materialAudioService.findMaterialAudioFilesByConcatResultSeq(concatResultSeq);
// ์๋ต ์์ฑ
- ConcatResultResponse response = ConcatResultResponse.builder()
- .concatResultSeq(concatResultSeq)
- .audioUrl(resultAudioUrl)
- .bgmFile(bgmFileResponse)
- .materialAudioFiles(materialAudioFiles)
- .build();
+ ConcatResultResponse response =
+ ConcatResultResponse.builder()
+ .concatResultSeq(concatResultSeq)
+ .audioUrl(resultAudioUrl)
+ .bgmFile(bgmFileResponse)
+ .materialAudioFiles(materialAudioFiles)
+ .build();
return new ResponseDto<>(HttpStatus.OK.value(), response).toResponseEntity();
}
@@ -81,14 +85,15 @@ public ResponseEntity> getAllMaterialsByResult
public ResponseEntity> getMaterialRowListByResultSeq(
@NotNull @RequestParam("concatresultseq") Long concatResultSeq,
@AuthenticationPrincipal CustomUserDetails userDetails) {
- projectService.projectCheck(userDetails.getMember().getSeq(), concatResultSeq);
+ projectService.checkProject(userDetails.getMember().getSeq(), concatResultSeq);
// resultSeq๋ก ์ฌ๋ฃ๊ฐ ๋ concatRowList ์ป์ด์ค๊ธฐ
- List materialConcatRowList = materialAudioService.findConcatRowListByResultSeq(concatResultSeq);
+ List materialConcatRowList =
+ materialAudioService.findConcatRowListByResultSeq(concatResultSeq);
// ์๋ต
- return new ResponseDto<>(HttpStatus.OK.value(), ConcatRowListDto.of(materialConcatRowList)).toResponseEntity();
+ return new ResponseDto<>(HttpStatus.OK.value(), ConcatRowListDto.of(materialConcatRowList))
+ .toResponseEntity();
// ์กฐํ ๊ฒฐ๊ณผ ์๋ต DTO๋ก ๋ณํ
}
-
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowController.java
index 68db82a3..143a2a5f 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowController.java
@@ -8,15 +8,14 @@
import com.oreo.finalproject_5re5_be.project.service.ProjectService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.IOException;
+import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
-import java.io.IOException;
-import java.util.List;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
@RequestMapping("/api/concat/row")
@@ -25,92 +24,89 @@ public class ConcatRowController {
private final ConcatRowService concatRowService;
private final ProjectService projectService;
- //์ค๋์ค ํ์ผ ์
๋ก๋ -> S3url๋ฆฌํด -> ํด๋ผ์์ url๋ก ๋ก์ฐ ์์ฑ -> ์ ์ฅ ์์ฒญ -> url๋ก ํ
์ด๋ธ ๋ก์ฐ ์์ฑ
- @Operation(
- summary = "ํ ์ ์ฅ",
- description = "์๋ก์ด ํ์ ์ ์ฅํฉ๋๋ค.")
+ // ์ค๋์ค ํ์ผ ์
๋ก๋ -> S3url๋ฆฌํด -> ํด๋ผ์์ url๋ก ๋ก์ฐ ์์ฑ -> ์ ์ฅ ์์ฒญ -> url๋ก ํ
์ด๋ธ ๋ก์ฐ ์์ฑ
+ @Operation(summary = "ํ ์ ์ฅ", description = "์๋ก์ด ํ์ ์ ์ฅํฉ๋๋ค.")
@PostMapping("save")
public ResponseEntity> save(
@RequestBody ConcatRowSaveRequestDto concatRowSaveRequestDto,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) throws IOException {
- projectService.projectCheck(customUserDetails.getMember().getSeq(),
- concatRowSaveRequestDto.getConcatTabId());
+ @AuthenticationPrincipal CustomUserDetails customUserDetails)
+ throws IOException {
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(), concatRowSaveRequestDto.getConcatTabId());
- return new ResponseDto<>(HttpStatus.OK.value(), concatRowService.saveConcatRows(concatRowSaveRequestDto))
+ return new ResponseDto<>(
+ HttpStatus.OK.value(), concatRowService.saveConcatRows(concatRowSaveRequestDto))
.toResponseEntity();
}
- @Operation(
- summary = "ํ ๋นํ์ฑ",
- description = "์ค๋์ค ํ์ผ์ด ์กฐํ๋์ง ์๋๋ก ๋นํ์ฑ ์ฒ๋ฆฌ ํฉ๋๋ค."
- )
+ @Operation(summary = "ํ ๋นํ์ฑ", description = "์ค๋์ค ํ์ผ์ด ์กฐํ๋์ง ์๋๋ก ๋นํ์ฑ ์ฒ๋ฆฌ ํฉ๋๋ค.")
@PostMapping("disable")
- public ResponseEntity> disable(@RequestParam List rowSeq,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(),
+ public ResponseEntity> disable(
+ @RequestParam List rowSeq,
+ @AuthenticationPrincipal CustomUserDetails customUserDetails) {
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(),
concatRowService.readConcatRow(rowSeq.get(0)).getConcatTab().getProjectId());
return new ResponseDto<>(HttpStatus.OK.value(), concatRowService.disableConcatRows(rowSeq))
.toResponseEntity();
}
-
- @Operation(
- summary = "ํ ์กฐํ",
- description = "ํ๋ ํ์ ์กฐํํฉ๋๋ค. ์ด์ ์ ๋นํ์ฑ ๋ ํ์ ์กฐํ ํ ์ ์์ต๋๋ค."
- )
+ @Operation(summary = "ํ ์กฐํ", description = "ํ๋ ํ์ ์กฐํํฉ๋๋ค. ์ด์ ์ ๋นํ์ฑ ๋ ํ์ ์กฐํ ํ ์ ์์ต๋๋ค.")
@GetMapping("read")
public ResponseEntity>> readOne(
@RequestParam Long concatRowSequence,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(),
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(),
concatRowService.readConcatRow(concatRowSequence).getConcatTab().getProjectId());
- //์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
- return new ResponseDto<>(HttpStatus.OK.value(), concatRowService.readConcatRows(concatRowSequence))
+ // ์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
+ return new ResponseDto<>(
+ HttpStatus.OK.value(), concatRowService.readConcatRows(concatRowSequence))
.toResponseEntity();
}
- @Operation(
- summary = "ํ ์กฐํ",
- description = "ํ๋ก์ ํธ์ ํ์ฑ ์ํ์ธ ํ์์กฐํํฉ๋๋ค. ์ด์ ์ ๋นํ์ฑ ๋ ํ์ ์กฐํ ํ ์ ์์ต๋๋ค."
- )
+ @Operation(summary = "ํ ์กฐํ", description = "ํ๋ก์ ํธ์ ํ์ฑ ์ํ์ธ ํ์์กฐํํฉ๋๋ค. ์ด์ ์ ๋นํ์ฑ ๋ ํ์ ์กฐํ ํ ์ ์์ต๋๋ค.")
@GetMapping("read/recent")
public ResponseEntity>> readRecent(
@RequestParam Long projectSequence,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(), projectSequence);
+ projectService.checkProject(customUserDetails.getMember().getSeq(), projectSequence);
- //์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
- return new ResponseDto<>(HttpStatus.OK.value(), concatRowService.readRecentConcatRows(projectSequence))
+ // ์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
+ return new ResponseDto<>(
+ HttpStatus.OK.value(), concatRowService.readRecentConcatRows(projectSequence))
.toResponseEntity();
}
- @Operation(
- summary = "ํ ์
๋ฐ์ดํธ",
- description = "ํ์ ์
๋ฐ์ดํธ ํฉ๋๋ค. ์๋ก์ด ํ์ด ์์ฑ ๋๋ฏ๋ก ์ด์ ์ ํ๊ณผ ๋ค๋ฅธ ์์ด๋๋ฅผ ๋ฐํ ํฉ๋๋ค."
- )
+ @Operation(summary = "ํ ์
๋ฐ์ดํธ", description = "ํ์ ์
๋ฐ์ดํธ ํฉ๋๋ค. ์๋ก์ด ํ์ด ์์ฑ ๋๋ฏ๋ก ์ด์ ์ ํ๊ณผ ๋ค๋ฅธ ์์ด๋๋ฅผ ๋ฐํ ํฉ๋๋ค.")
@PostMapping("update")
- public ResponseEntity> update(@RequestBody ConcatRowSaveRequestDto concatRowSaveRequestDto,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(), concatRowSaveRequestDto.getConcatTabId());
+ public ResponseEntity> update(
+ @RequestBody ConcatRowSaveRequestDto concatRowSaveRequestDto,
+ @AuthenticationPrincipal CustomUserDetails customUserDetails) {
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(), concatRowSaveRequestDto.getConcatTabId());
- return new ResponseDto<>(HttpStatus.OK.value(), concatRowService.updateConcatRows(concatRowSaveRequestDto))
+ return new ResponseDto<>(
+ HttpStatus.OK.value(), concatRowService.updateConcatRows(concatRowSaveRequestDto))
.toResponseEntity();
}
- @Operation(
- summary = "ํ ํ
์คํธ ์
๋ก๋",
- description = "ํ์ ํ
์คํธ๋ฅผ ์
๋ก๋ ํฉ๋๋ค. ์ด์ ๊ณผ ๊ฐ์ ์์ด๋๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "ํ ํ
์คํธ ์
๋ก๋", description = "ํ์ ํ
์คํธ๋ฅผ ์
๋ก๋ ํฉ๋๋ค. ์ด์ ๊ณผ ๊ฐ์ ์์ด๋๋ฅผ ๋ฐํํฉ๋๋ค.")
@PostMapping("upload/text")
public ResponseEntity> uploadText(
@AuthenticationPrincipal CustomUserDetails customUserDetails,
@RequestBody ConcatRowSaveRequestDto concatRowSaveRequestDto) {
- boolean uploadText = concatRowService.uploadText(concatRowSaveRequestDto.getConcatRowRequests());
+
+ // ์๋น์ค ํธ์ถ
+ boolean uploadText = concatRowService.uploadText(concatRowSaveRequestDto);
+
+ // ๊ฒฐ๊ณผ ์๋ต ์์ฑ
if (uploadText) {
return new ResponseDto<>(HttpStatus.OK.value(), uploadText).toResponseEntity();
+ } else {
+ return new ResponseDto<>(HttpStatus.BAD_REQUEST.value(), uploadText).toResponseEntity();
}
- return new ResponseDto<>(HttpStatus.BAD_REQUEST.value(), uploadText).toResponseEntity();
}
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowTabController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowTabController.java
index f0951ae7..c2ff5b4d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowTabController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatRowTabController.java
@@ -4,108 +4,96 @@
import com.oreo.finalproject_5re5_be.concat.dto.request.*;
import com.oreo.finalproject_5re5_be.concat.dto.response.ConcatTabResponseDto;
import com.oreo.finalproject_5re5_be.concat.dto.response.TabRowResponseDto;
-import com.oreo.finalproject_5re5_be.concat.service.AudioFileService;
-import com.oreo.finalproject_5re5_be.concat.service.ConcatRowService;
-import com.oreo.finalproject_5re5_be.concat.service.ConcatTabService;
+import com.oreo.finalproject_5re5_be.concat.service.*;
import com.oreo.finalproject_5re5_be.global.dto.response.ResponseDto;
import com.oreo.finalproject_5re5_be.member.dto.CustomUserDetails;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
-import java.util.List;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
-
@RestController
@RequiredArgsConstructor
@RequestMapping("api/v2/concat")
public class ConcatRowTabController {
- private final ConcatRowService concatRowService;
private final ConcatTabService concatTabService;
private final AudioFileService audioFileService;
+ private final ConcatRowTabService concatRowTabService;
- //ํญ ๋ก์ฐ ์กฐํ
- //ํญ ๋ก์ฐ ์ ์ฅ
+ // ํญ ๋ก์ฐ ์กฐํ
+ // ํญ ๋ก์ฐ ์ ์ฅ
- @Operation(
- summary = "ConcatRow, ConcatTab์ ์ ์ฅํฉ๋๋ค.",
- description = ""
- )
+ @Operation(summary = "ConcatRow, ConcatTab์ ์ ์ฅํฉ๋๋ค.")
@PostMapping("save")
public ResponseEntity> saveRowAndTab(
@RequestBody TabRowUpdateRequestDto dto,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
- ConcatRowSaveRequestDto concatRows = dto.getConcatRows();
- ConcatUpdateRequestDto concatTabs = dto.getConcatTab();
- boolean updateConcatTab = concatTabService.updateConcatTab(concatTabs, customUserDetails.getMember().getSeq());
- boolean updateConcatRows = concatRowService.updateConcatRows(concatRows);
- return new ResponseDto<>(HttpStatus.OK.value(), updateConcatTab && updateConcatRows).toResponseEntity();
-
+ try {
+ boolean result =
+ concatRowTabService.saveTabAndRows(dto, customUserDetails.getMember().getSeq());
+ return new ResponseDto<>(HttpStatus.OK.value(), result).toResponseEntity();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new ResponseDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), false).toResponseEntity();
+ }
}
-// @Operation(
-// summary = "ConcatRow, ConcatTab์ ์ ์ฅํฉ๋๋ค.",
-// description = ""
-// )
-// @PostMapping("save")
-// public ResponseEntity> saveRowAndTab(
-// @RequestBody TabRowUpdateRequestDto dto,
-// @AuthenticationPrincipal CustomUserDetails customUserDetails) {
-// ConcatUpdateRequestDto concatUpdateRequestDto = dto.getConcatTab();
-// Long memberSeq = customUserDetails.getMember().getSeq();
-// List rowAudioFiles = dto.getAudioFiles();
-// boolean updateTab = false;
-// boolean updateRow = false;
-// if (concatUpdateRequestDto != null) {
-// updateTab = concatTabService.updateConcatTab(concatUpdateRequestDto,
-// memberSeq);
-// updateRow = concatRowService.updateConcatRows(rowAudioFiles, concatUpdateRequestDto.getTabId());
-// }
-//
-// return new ResponseDto<>(HttpStatus.OK.value(), updateTab && updateRow).toResponseEntity();
-// }
-//
-
- @Operation(
- summary = "ConcatRow, ConcatTab์ ์กฐํํฉ๋๋ค.",
- description = ""
- )
+ @Operation(summary = "ConcatRow, ConcatTab์ ์กฐํํฉ๋๋ค.")
@GetMapping("read")
public ResponseEntity> readRowAndTab(
- @RequestParam Long projectSeq,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) {
- ConcatTabResponseDto concatTabResponseDto
- = concatTabService.readConcatTab(projectSeq, customUserDetails.getMember().getSeq());
-
- List audioFiles = audioFileService.getAudioFilesByProjectAndStatusTrue(projectSeq);
-
-
- List concatRowRequests = audioFiles.stream().map(x -> ConcatRowRequest.builder()
- .originAudioRequest(OriginAudioRequest.builder()
- .seq(x.getAudioFileSeq())
- .audioUrl(x.getAudioUrl())
- .fileName(x.getFileName())
- .fileSize(x.getFileSize())
- .fileLength(x.getFileLength())
- .extension(x.getExtension()).build()
- )
- .rowText(x.getConcatRow().getRowText())
- .rowIndex(x.getConcatRow().getRowIndex())
- .rowSilence(x.getConcatRow().getSilence())
- .status(x.getConcatRow().getStatus())
- .seq(x.getConcatRow().getConcatRowSequence())
- .build()).toList();
-
-
- return new ResponseDto<>(HttpStatus.OK.value(), new TabRowResponseDto(concatTabResponseDto,
- new ConcatRowSaveRequestDto(concatTabResponseDto.getTabId(), concatRowRequests)))
+ @RequestParam Long projectSeq, @AuthenticationPrincipal CustomUserDetails customUserDetails) {
+
+ // Tab setting
+ ConcatTabResponseDto concatTabResponseDto =
+ concatTabService.readConcatTab(projectSeq, customUserDetails.getMember().getSeq());
+
+ // ConcatTabResponseDto์ bgmFileList ์ถ๊ฐ
+ concatTabResponseDto =
+ ConcatTabResponseDto.builder()
+ .tabId(concatTabResponseDto.getTabId())
+ .frontSilence(concatTabResponseDto.getFrontSilence())
+ .status(concatTabResponseDto.getStatus())
+ .bgmFileList(concatTabResponseDto.getBgmFileList()) // BgmFile ๋ฆฌ์คํธ ์ถ๊ฐ
+ .build();
+
+ // Row setting
+ // ConcatRow์ AudioFile ๋ฆฌ์คํธ ์กฐํ
+ List audioFiles =
+ audioFileService.getAudioFilesByProjectAndStatusTrue(projectSeq);
+
+ List concatRowRequests =
+ audioFiles.stream()
+ .map(
+ x ->
+ ConcatRowRequest.builder()
+ .originAudioRequest(
+ OriginAudioRequest.builder()
+ .seq(x.getAudioFileSeq())
+ .audioUrl(x.getAudioUrl())
+ .fileName(x.getFileName())
+ .fileSize(x.getFileSize())
+ .fileLength(x.getFileLength())
+ .extension(x.getExtension())
+ .build())
+ .rowText(x.getConcatRow().getRowText())
+ .selected(x.getConcatRow().getSelected())
+ .rowIndex(x.getConcatRow().getRowIndex())
+ .rowSilence(x.getConcatRow().getSilence())
+ .status(x.getConcatRow().getStatus())
+ .seq(x.getConcatRow().getConcatRowSequence())
+ .build())
+ .toList();
+
+ return new ResponseDto<>(
+ HttpStatus.OK.value(),
+ new TabRowResponseDto(
+ concatTabResponseDto,
+ new ConcatRowSaveRequestDto(concatTabResponseDto.getTabId(), concatRowRequests)))
.toResponseEntity();
}
}
-
-
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatTabController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatTabController.java
index 9ae9699d..65bfdccd 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatTabController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatTabController.java
@@ -10,14 +10,13 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
-import java.util.List;
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
@RequiredArgsConstructor
@@ -27,57 +26,57 @@ public class ConcatTabController {
private final ConcatTabService concatTabService;
private final ProjectService projectService;
- @Operation(
- summary = "ํ๋ก์ ํธ์ Concat ํญ์ ์์ฑํฉ๋๋ค.",
- description = "์์ฑ์ด ์ฑ๊ณตํ๋ค๋ฉด True๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "ํ๋ก์ ํธ์ Concat ํญ์ ์์ฑํฉ๋๋ค.", description = "์์ฑ์ด ์ฑ๊ณตํ๋ค๋ฉด True๋ฅผ ๋ฐํํฉ๋๋ค.")
@PostMapping("create")
- public ResponseEntity> create(@RequestBody ConcatCreateRequestDto createRequestDto) {
- projectService.projectCheck(createRequestDto.getMemberSequence(), createRequestDto.getProjectSequence());
- //์ฌ์ฉ์ ์์ธ์ฒ๋ฆฌ
- return new ResponseDto<>(HttpStatus.OK.value(), concatTabService.createConcatTab(createRequestDto))
+ public ResponseEntity> create(
+ @AuthenticationPrincipal CustomUserDetails customUserDetails, @RequestParam Long projectSeq) {
+ projectService.checkProject(customUserDetails.getMember().getSeq(), projectSeq);
+ // ์ฌ์ฉ์ ์์ธ์ฒ๋ฆฌ
+ return new ResponseDto<>(
+ HttpStatus.OK.value(),
+ concatTabService.createConcatTab(
+ new ConcatCreateRequestDto(projectSeq, customUserDetails.getMember().getSeq())))
.toResponseEntity();
}
- @Operation(
- summary = "ํญ ์กฐํ",
- description = "ํ๋ก์ ํธ์ Concat ํญ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํญ์ ์ ์ฅ๋ ํ ์ ๋ณด๋ ๋ฐํ๋์ง ์์ต๋๋ค."
- )
+ @Operation(summary = "ํญ ์กฐํ", description = "ํ๋ก์ ํธ์ Concat ํญ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํญ์ ์ ์ฅ๋ ํ ์ ๋ณด๋ ๋ฐํ๋์ง ์์ต๋๋ค.")
@GetMapping("read")
public ResponseEntity> read(
- @RequestParam Long projectSeq,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(), projectSeq);
- //์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
- return new ResponseDto<>(HttpStatus.OK.value(),
- concatTabService.readConcatTab(projectSeq, customUserDetails.getMember().getSeq()))
+ @RequestParam Long projectSeq, @AuthenticationPrincipal CustomUserDetails customUserDetails) {
+ projectService.checkProject(customUserDetails.getMember().getSeq(), projectSeq);
+ // ์ฌ์ฉ์ ์์ธ ์ฒ๋ฆฌ
+ return new ResponseDto<>(
+ HttpStatus.OK.value(),
+ concatTabService.readConcatTab(projectSeq, customUserDetails.getMember().getSeq()))
.toResponseEntity();
}
- @Operation(
- summary = "ํญ ์
๋ฐ์ดํธ",
- description = "ํ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค. ์ฑ๊ณตํ๋ค๋ฉด True๋ฅผ ๋ฐํํฉ๋๋ค."
- )
+ @Operation(summary = "ํญ ์
๋ฐ์ดํธ", description = "ํ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค. ์ฑ๊ณตํ๋ค๋ฉด True๋ฅผ ๋ฐํํฉ๋๋ค.")
@PostMapping("update")
- public ResponseEntity> update(@RequestBody ConcatUpdateRequestDto updateRequestDto,
- @AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(), updateRequestDto.getTabId());
- return new ResponseDto<>(HttpStatus.OK.value(),
- concatTabService.updateConcatTab(updateRequestDto, customUserDetails.getMember().getSeq()))
+ public ResponseEntity> update(
+ @RequestBody ConcatUpdateRequestDto updateRequestDto,
+ @AuthenticationPrincipal CustomUserDetails customUserDetails) {
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(), updateRequestDto.getTabId());
+ return new ResponseDto<>(
+ HttpStatus.OK.value(),
+ concatTabService.updateConcatTab(
+ updateRequestDto, customUserDetails.getMember().getSeq()))
.toResponseEntity();
}
@Operation(
summary = "BGM ์ค๋์ค ํ์ผ ์
๋ฐ์ดํธ",
- description = "BGM ์ค๋์ค ํ์ผ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํฉ๋๋ค. BgmFile ID ๋ชฉ๋ก์ ์ ๋ฌํฉ๋๋ค."
- )
+ description = "BGM ์ค๋์ค ํ์ผ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํฉ๋๋ค. BgmFile ID ๋ชฉ๋ก์ ์ ๋ฌํฉ๋๋ค.")
@PostMapping("update-bgm")
public ResponseEntity> updateBgm(
@RequestParam Long tabSeq,
- @RequestBody(required = false) @Schema(description = "BgmFile ID ๋ชฉ๋ก", example = "[101, 102, 103]") List bgmAudioFileSeqs,
+ @RequestBody(required = false)
+ @Schema(description = "BgmFile ID ๋ชฉ๋ก", example = "[101, 102, 103]")
+ List bgmAudioFileSeqs,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
// ํ๋ก์ ํธ ๊ถํ ํ์ธ
- projectService.projectCheck(customUserDetails.getMember().getSeq(), tabSeq);
+ projectService.checkProject(customUserDetails.getMember().getSeq(), tabSeq);
// BGM ์
๋ฐ์ดํธ ์ฒ๋ฆฌ
boolean result = concatTabService.updateBgmAudioFiles(tabSeq, bgmAudioFileSeqs);
@@ -85,6 +84,4 @@ public ResponseEntity> updateBgm(
// ์๋ต ๋ฐํ
return new ResponseDto<>(HttpStatus.OK.value(), result).toResponseEntity();
}
-
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatWithBgmController.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatWithBgmController.java
index f208eee4..0996ba7d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatWithBgmController.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/controller/ConcatWithBgmController.java
@@ -1,21 +1,15 @@
package com.oreo.finalproject_5re5_be.concat.controller;
import com.oreo.finalproject_5re5_be.concat.dto.ConcatResponseDto;
-import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
-import com.oreo.finalproject_5re5_be.concat.dto.request.SelectedConcatRowRequest;
+import com.oreo.finalproject_5re5_be.concat.dto.request.*;
import com.oreo.finalproject_5re5_be.concat.dto.response.ConcatUrlResponse;
import com.oreo.finalproject_5re5_be.concat.entity.AudioFile;
-import com.oreo.finalproject_5re5_be.concat.repository.BgmFileRepository;
-import com.oreo.finalproject_5re5_be.concat.service.AudioFileService;
-import com.oreo.finalproject_5re5_be.concat.service.AudioStreamService;
-import com.oreo.finalproject_5re5_be.concat.service.ConcatResultService;
-import com.oreo.finalproject_5re5_be.concat.service.MaterialAudioService;
+import com.oreo.finalproject_5re5_be.concat.service.*;
import com.oreo.finalproject_5re5_be.concat.service.bgm.BgmProcessor;
import com.oreo.finalproject_5re5_be.concat.service.concatenator.AudioProperties;
import com.oreo.finalproject_5re5_be.concat.service.concatenator.IntervalConcatenator;
import com.oreo.finalproject_5re5_be.concat.service.concatenator.StereoIntervalConcatenator;
import com.oreo.finalproject_5re5_be.global.component.S3Service;
-import com.oreo.finalproject_5re5_be.global.component.SqsService;
import com.oreo.finalproject_5re5_be.global.component.audio.AudioFormats;
import com.oreo.finalproject_5re5_be.global.component.audio.AudioResample;
import com.oreo.finalproject_5re5_be.global.dto.response.ResponseDto;
@@ -27,21 +21,21 @@
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-
@Tag(name = "Concat", description = "Concat ๊ด๋ จ API")
@RestController
+@Log4j2
@RequestMapping("/api/concat")
@RequiredArgsConstructor
public class ConcatWithBgmController {
@@ -49,118 +43,132 @@ public class ConcatWithBgmController {
private final S3Service s3Service;
private final MaterialAudioService materialAudioService;
private final ConcatResultService concatResultService;
- private final SqsService sqsService;
private final AudioFileService audioFileService;
private final AudioStreamService audioStreamService; // ์ถ๊ฐ๋ ์๋น์ค
private final AudioResample audioResample = new AudioResample(); // ๋ฆฌ์ํ๋ง ์ ํธ. Bean์ด ์๋๋ผ new๋ก ์์ฑ
- private final AudioFormat defaultAudioFormat = AudioFormats.STEREO_FORMAT_SR441_B32; // ๊ธฐ๋ณธ ํฌ๋งท
+ private final AudioFormat defaultAudioFormat = AudioFormats.STEREO_FORMAT_SR441_B16; // ๊ธฐ๋ณธ ํฌ๋งท
private final ProjectService projectService;
- private final BgmFileRepository bgmFileRepository;
+ private final BgmFileService bgmFileService;
@Operation(
summary = "Row ์ค๋์ค์ BGM ํ์ผ ๋ณํฉ",
description = "์ ํ๋ Row ์ค๋์ค ํ์ผ๊ณผ BGM ํ์ผ์ ๋ณํฉํ์ฌ S3์ ์
๋ก๋ํฉ๋๋ค.",
responses = {
- @ApiResponse(
- responseCode = "200",
- description = "์ฑ๊ณต์ ์ผ๋ก ๋ณํฉ๋ ์ค๋์ค URL์ ๋ฐํํฉ๋๋ค.",
- content = @Content(
- mediaType = "application/json",
- schema = @Schema(implementation = ConcatResponseDto.class)
- )
- ),
- @ApiResponse(
- responseCode = "500",
- description = "๋ณํฉ ์์
์ค ์ค๋ฅ ๋ฐ์",
- content = @Content(
- mediaType = "application/json",
- schema = @Schema(implementation = ResponseDto.class)
- )
- )
- }
- )
+ @ApiResponse(
+ responseCode = "200",
+ description = "์ฑ๊ณต์ ์ผ๋ก ๋ณํฉ๋ ์ค๋์ค URL์ ๋ฐํํฉ๋๋ค.",
+ content =
+ @Content(
+ mediaType = "application/json",
+ schema = @Schema(implementation = ConcatResponseDto.class))),
+ @ApiResponse(
+ responseCode = "500",
+ description = "๋ณํฉ ์์
์ค ์ค๋ฅ ๋ฐ์",
+ content =
+ @Content(
+ mediaType = "application/json",
+ schema = @Schema(implementation = ResponseDto.class)))
+ })
@PostMapping("/execute-with-bgm")
public ResponseEntity> executeConcatWithBgm(
- @Parameter(description = "๊ฒฐ๊ณผ๋ฌผ์ด ๋์จ concatTab", required = true) @RequestParam Long concatTabSeq,
- @Parameter(description = "bgm์ผ๋ก ์ธ ์ค๋์คํ์ผ์ url", required = true) @RequestParam String bgmFileUrl,
- @Parameter(description = "์ ์ฅํ ๊ฒฐ๊ณผํ์ผ ์ด๋ฆ", required = true) @RequestParam String concatResultFileName,
-// @RequestBody BgmFunctionRequestDto bgmFunctionRequestDto,
- @RequestBody SelectedConcatRowRequest selectedRows,
+ @Parameter(description = "์ ์ฅํ ๊ฒฐ๊ณผํ์ผ ์ด๋ฆ", required = true) @RequestParam
+ String concatResultFileName,
+ @RequestBody TabRowUpdateRequestDto requestDto,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
- projectService.projectCheck(customUserDetails.getMember().getSeq(), concatTabSeq);
try {
-// //SQS๋ก ๋ฉ์ธ์ง ๋ณด๋ด๊ธฐ. ๊ฐ๊ฐ messageBody์ messageAttribute๋ก ๋ค์ด๊ฐ ๋ด์ฉ
-// Message message = sqsService.sendMessage(bgmFunctionRequestDto, MessageType.CONCAT_BGM_MAKE);
+ // Extracting data from the new DTO
+ ConcatUpdateRequestDto concatTab = requestDto.getConcatTab();
+ ConcatRowSaveRequestDto concatRows = requestDto.getConcatRows();
+
+ Long concatTabSeq = concatTab.getTabId();
+ float frontSilence = concatTab.getFrontSilence();
+ String bgmFileUrl = concatTab.getBgmFileList().get(0).getAudioUrl();
+
+ log.info("concatTab:{}", concatTabSeq);
- IntervalConcatenator intervalConcatenator = new StereoIntervalConcatenator(defaultAudioFormat);
+ projectService.checkProject(
+ customUserDetails.getMember().getSeq(), requestDto.getConcatTab().getTabId());
- // Concat ์์
: 1. Row ์ค๋์ค ํ์ผ ๋ก๋ ๋ฐ ๋ฌด์ ์ฒ๋ฆฌ
- List audioProperties = audioStreamService.loadAudioFiles(selectedRows);
+ IntervalConcatenator intervalConcatenator =
+ new StereoIntervalConcatenator(defaultAudioFormat);
+
+ List audioProperties = audioStreamService.loadAudioFiles(concatRows);
// 2. ๋ณํฉ๋ ์ค๋์ค ์์ฑ
- ByteArrayOutputStream concatenatedAudioBuffer = intervalConcatenator.intervalConcatenate(audioProperties, selectedRows.getInitialSilence());
+ ByteArrayOutputStream concatenatedAudioBuffer =
+ intervalConcatenator.intervalConcatenate(audioProperties, frontSilence);
- // Bgm ์์
: 1. ๋ณํฉ๋ ์ค๋์ค๋ฅผ AudioInputStream์ผ๋ก ๋ณํ
- AudioInputStream concatenatedAudioStream = audioStreamService.createAudioInputStream(concatenatedAudioBuffer, defaultAudioFormat);
+ AudioInputStream concatenatedAudioStream =
+ audioStreamService.createAudioInputStream(concatenatedAudioBuffer, defaultAudioFormat);
- // 2. BGM ์คํธ๋ฆผ ๋ก๋ ๋ฐ ๋ฒํผ๋ง
- AudioInputStream bufferedBgmStream = s3Service.loadAsBufferedStream(bgmFileUrl);
+ // BGM ์์
1: BGM ์คํธ๋ฆผ ๋ก๋ ๋ฐ ๋ฒํผ๋ง
+ AudioInputStream bufferedBgmStream = audioStreamService.loadAsBufferedStream(bgmFileUrl);
// 3. BGM ๊ธธ์ด ์กฐ์
long targetFrames = audioStreamService.getValidFrameLength(concatenatedAudioStream);
long bgmFrames = audioStreamService.getValidFrameLength(bufferedBgmStream);
+
+ // ๋ก๊ทธ ์ถ๊ฐ: ํ๋ ์ ๊ธธ์ด ํ์ธ
+
bufferedBgmStream = BgmProcessor.adjustBgmLength(bufferedBgmStream, targetFrames, bgmFrames);
// 4. ๋ฏน์ฑ
- AudioInputStream mixedAudioStream = BgmProcessor.mixAudio(concatenatedAudioStream, bufferedBgmStream);
+ AudioInputStream mixedAudioStream =
+ BgmProcessor.mixAudio(concatenatedAudioStream, bufferedBgmStream);
// ๊ฒฐ๊ณผํ์ผ S3 ์
๋ก๋
- String resultAudioUrl = s3Service.uploadAudioStream(mixedAudioStream, "concat/result", concatResultFileName);
-
-// String audioUrl = "";
-// String concatResultFileName = "";
-// AudioInputStream mixedAudioStream = null;
-// SelectedConcatRowRequest selectedRows = null;
-
- // DB ConcatResultํ
์ด๋ธ์ ๊ฒฐ๊ณผ ์ ์ฅ
- ConcatUrlResponse concatResultResponse = concatResultService.saveConcatResult(concatTabSeq, resultAudioUrl, concatResultFileName, mixedAudioStream);
- // Material ๋ฐ์ดํฐ ์ ์ฅ (์ฌ๋ฃ ํ์ผ, ๊ฒฐ๊ณผํ์ผ ์ ์ฅ๋์ด ์๋ ์ํ๋ก ๊ต์ฐจํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ ์ฅ)
- materialAudioService.saveMaterialsForSelectedRows(selectedRows, concatResultResponse);
-
- // Concat ์ฌ๋ฃ ํ์ผ ์ ๋ณด ์์ฑ
- List concatRowFiles = selectedRows.getRows().stream()
- .map(row -> audioFileService.getAudioFileByUrl(row.getAudioUrl()))
- .map(this::convertToOriginAudioRequest)
- .toList();
-
- // BGM ํ์ผ ์ ๋ณด ์์ฑ
- AudioFile bgmAudioFile = audioFileService.getAudioFileByUrl(bgmFileUrl); // URL๋ก AudioFile ์กฐํ
- OriginAudioRequest bgmFile = OriginAudioRequest.builder()
- .seq(bgmAudioFile.getAudioFileSeq()) // AudioFile์ ์๋ณ ID
- .audioUrl(bgmAudioFile.getAudioUrl()) // BGM ํ์ผ URL
- .extension(bgmAudioFile.getExtension()) // BGM ํ์ผ ํ์ฅ์
- .fileSize(bgmAudioFile.getFileSize()) // ํ์ผ ํฌ๊ธฐ
- .fileLength(bgmAudioFile.getFileLength()) // ํ์ผ ๊ธธ์ด
- .fileName(bgmAudioFile.getFileName()) // ํ์ผ ์ด๋ฆ
- .build();
+ String resultAudioUrl =
+ s3Service.uploadAudioStream(mixedAudioStream, "concat/result", concatResultFileName);
+
+ // DB ์ ์ฅ1. ConcatResult DB
+ ConcatUrlResponse concatResultResponse =
+ concatResultService.saveConcatResult(
+ concatTabSeq, resultAudioUrl, concatResultFileName, mixedAudioStream);
+
+ OriginAudioRequest bgmRequest = concatTab.getBgmFileList().get(0);
+
+ // BGM ๋ฐ์ดํฐ์ ConcatResult ๋งค์นญ ์
๋ฐ์ดํธ
+ try {
+ bgmFileService.updateBgmFileWithConcatResult(bgmFileUrl, concatResultResponse.getSeq());
+ } catch (IllegalArgumentException e) {
+ log.warn("[BGM] Failed to update BgmFile: {}", e.getMessage());
+ }
+
+ // DB ์ ์ฅ2. Material ๋ฐ์ดํฐ ์ ์ฅ (์ฌ๋ฃ ํ์ผ, ๊ฒฐ๊ณผํ์ผ ์ ์ฅ๋์ด ์๋ ์ํ๋ก ๊ต์ฐจํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ ์ฅ)
+ materialAudioService.saveMaterialsForConcatRows(concatRows, concatResultResponse);
+
+ // ์๋ต์ ๋ค์ด๊ฐ concatRowFiles ์์ฑ
+ List concatRowFiles =
+ concatRows.getConcatRowRequests().stream()
+ .map(
+ row -> {
+ AudioFile audioFile =
+ audioFileService.getAudioFileByUrl(row.getOriginAudioRequest().getSeq());
+ return audioFile;
+ })
+ .map(this::convertToOriginAudioRequest)
+ .peek(
+ originAudioRequest ->
+ log.info("Converted to OriginAudioRequest: {}", originAudioRequest))
+ .toList();
// ์๋ต ์์ฑ
- ConcatResponseDto responseDto = ConcatResponseDto.builder()
- .audioUrl(resultAudioUrl)
- .bgmFile(bgmFile)
- .concatRowFiles(concatRowFiles)
- .build();
+ ConcatResponseDto responseDto =
+ ConcatResponseDto.builder()
+ .audioUrl(resultAudioUrl)
+ .bgmFile(bgmRequest)
+ .concatRowFiles(concatRowFiles)
+ .build();
return new ResponseDto<>(HttpStatus.OK.value(), responseDto).toResponseEntity();
} catch (Exception e) {
- // ์คํจ ์๋ต ์์ฑ
+ e.printStackTrace();
return createErrorResponse();
}
}
-
private OriginAudioRequest convertToOriginAudioRequest(AudioFile audioFile) {
return OriginAudioRequest.builder()
.seq(audioFile.getAudioFileSeq())
@@ -173,12 +181,13 @@ private OriginAudioRequest convertToOriginAudioRequest(AudioFile audioFile) {
}
private ResponseEntity> createErrorResponse() {
- return new ResponseDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(),
- ConcatResponseDto.builder()
- .audioUrl(null) // ๊ฒฐ๊ณผ ํ์ผ URL ์์
- .bgmFile(null) // BGM ํ์ผ ์ ๋ณด ์์
- .concatRowFiles(new ArrayList<>()) // ConcatRow ํ์ผ ์ ๋ณด ์์
- .build()
- ).toResponseEntity();
+ return new ResponseDto<>(
+ HttpStatus.INTERNAL_SERVER_ERROR.value(),
+ ConcatResponseDto.builder()
+ .audioUrl(null) // ๊ฒฐ๊ณผ ํ์ผ URL ์์
+ .bgmFile(null) // BGM ํ์ผ ์ ๋ณด ์์
+ .concatRowFiles(new ArrayList<>()) // ConcatRow ํ์ผ ์ ๋ณด ์์
+ .build())
+ .toResponseEntity();
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResponseDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResponseDto.java
index f0004909..0c677328 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResponseDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResponseDto.java
@@ -1,9 +1,8 @@
package com.oreo.finalproject_5re5_be.concat.dto;
import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
-import lombok.*;
-
import java.util.List;
+import lombok.*;
@Getter
@Setter
@@ -14,4 +13,4 @@ public class ConcatResponseDto {
private String audioUrl; // ๊ฒฐ๊ณผ ํ์ผ URL
private OriginAudioRequest bgmFile; // BGM ์ค๋์ค ํ์ผ ์ ๋ณด
private List concatRowFiles; // ConcatRow์์ ์ฌ์ฉ๋ ํ์ผ ์ ๋ณด ๋ฆฌ์คํธ
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResultDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResultDto.java
index 56a9fbce..5be5b806 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResultDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatResultDto.java
@@ -9,8 +9,10 @@ public class ConcatResultDto {
private Long concatResultSequence;
private Long fileSize;
private Float fileLength;
+ private Integer seperated;
private String audioUrl;
private String fileName;
private String extension;
+ private String processId;
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowDto.java
index 44cc2a7e..d14d9d34 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowDto.java
@@ -17,7 +17,6 @@ public class ConcatRowDto {
private Float silence;
private Integer rowIndex;
-
// concatRow ์ํฐํฐ ์ ๋ณด๋ก ConcatRowDto ๊ฐ์ฒด ์์ฑํ๋ ๋ฉ์๋
public static ConcatRowDto of(ConcatRow concatRow) {
return ConcatRowDto.builder()
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowListDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowListDto.java
index 24412d58..46742651 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowListDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/ConcatRowListDto.java
@@ -1,12 +1,11 @@
package com.oreo.finalproject_5re5_be.concat.dto;
import com.oreo.finalproject_5re5_be.concat.entity.ConcatRow;
+import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-import java.util.List;
-
@Getter
@Builder
@ToString
@@ -20,8 +19,6 @@ public static ConcatRowListDto of(List concatRowEntityList) {
concatRowEntityList.stream().map(ConcatRowDto::of).toList();
// ConcatRowDto ๋ฆฌ์คํธ๋ฅผ ๋ฃ์ผ๋ฉฐ ConcatRowListDto ์์ฑ
- return ConcatRowListDto.builder()
- .rowList(concatRowDtoLList)
- .build();
+ return ConcatRowListDto.builder().rowList(concatRowDtoLList).build();
}
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/RowAudioFileDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/RowAudioFileDto.java
index 6fed9882..2db4615c 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/RowAudioFileDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/RowAudioFileDto.java
@@ -1,23 +1,23 @@
package com.oreo.finalproject_5re5_be.concat.dto;
+import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-import java.time.LocalDateTime;
@ToString
@Builder
@AllArgsConstructor
@Getter
public class RowAudioFileDto {
- private Long audioFileSeq;
- private String audioUrl;
- private String extension;
- private Long fileSize;
- private Long fileLength;
- private String fileName;
- private LocalDateTime createdDate;
+ private Long audioFileSeq;
+ private String audioUrl;
+ private String extension;
+ private Long fileSize;
+ private Long fileLength;
+ private String fileName;
+ private LocalDateTime createdDate;
- private ConcatRowDto concatRow;
-}
\ No newline at end of file
+ private ConcatRowDto concatRow;
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/AudioFormatDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/AudioFormatDto.java
new file mode 100644
index 00000000..67fb8de7
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/AudioFormatDto.java
@@ -0,0 +1,45 @@
+package com.oreo.finalproject_5re5_be.concat.dto.lambda;
+
+import javax.sound.sampled.AudioFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AudioFormatDto {
+ private Float sampleRate;
+ private Integer bitDepth;
+ private Integer channels;
+ private Integer frameSize;
+ private Float frameRate;
+
+ public AudioFormatDto() {}
+
+ public AudioFormatDto(AudioFormat audioFormat) {
+ this.sampleRate = audioFormat.getSampleRate();
+ this.bitDepth = audioFormat.getSampleSizeInBits();
+ this.channels = audioFormat.getChannels();
+ this.frameSize = audioFormat.getFrameSize();
+ this.frameRate = audioFormat.getFrameRate();
+ }
+
+ public AudioFormatDto(
+ Float sampleRate, Integer bitDepth, Integer channels, Integer frameSize, Float frameRate) {
+ this.sampleRate = sampleRate;
+ this.bitDepth = bitDepth;
+ this.channels = channels;
+ this.frameSize = frameSize;
+ this.frameRate = frameRate;
+ }
+
+ public AudioFormat toAudioFormat() {
+ return new AudioFormat(
+ AudioFormat.Encoding.PCM_SIGNED,
+ sampleRate,
+ bitDepth,
+ channels,
+ frameSize,
+ frameRate,
+ false);
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/LambdaConcatRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/LambdaConcatRequest.java
new file mode 100644
index 00000000..9bbae75f
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/LambdaConcatRequest.java
@@ -0,0 +1,59 @@
+package com.oreo.finalproject_5re5_be.concat.dto.lambda;
+
+import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatRowRequest;
+import com.oreo.finalproject_5re5_be.concat.dto.response.ConcatTabResponseDto;
+import java.util.List;
+import lombok.Builder;
+
+@Builder
+public class LambdaConcatRequest {
+ private ConcatTabResponseDto concatTabResponseDto;
+ private AudioFormatDto audioFormatDto;
+ private List audios;
+ private String fileName;
+
+ public LambdaConcatRequest() {}
+
+ public LambdaConcatRequest(
+ ConcatTabResponseDto concatTabResponseDto,
+ AudioFormatDto audioFormatDto,
+ List audios,
+ String fileName) {
+ this.concatTabResponseDto = concatTabResponseDto;
+ this.audioFormatDto = audioFormatDto;
+ this.audios = audios;
+ this.fileName = fileName;
+ }
+
+ public List getAudios() {
+ return audios;
+ }
+
+ public void setAudios(List audios) {
+ this.audios = audios;
+ }
+
+ public AudioFormatDto getAudioFormatDto() {
+ return audioFormatDto;
+ }
+
+ public void setAudioFormatDto(AudioFormatDto audioFormatDto) {
+ this.audioFormatDto = audioFormatDto;
+ }
+
+ public ConcatTabResponseDto getConcatTabResponseDto() {
+ return concatTabResponseDto;
+ }
+
+ public void setConcatTabResponseDto(ConcatTabResponseDto concatTabResponseDto) {
+ this.concatTabResponseDto = concatTabResponseDto;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/AudioInfo.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/AudioInfo.java
new file mode 100644
index 00000000..334199e5
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/AudioInfo.java
@@ -0,0 +1,45 @@
+package com.oreo.finalproject_5re5_be.concat.dto.lambda.response;
+
+import com.oreo.finalproject_5re5_be.global.component.audio.AudioExtensionConverter;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import javax.sound.sampled.AudioInputStream;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class AudioInfo {
+ private byte[] audioData;
+ private String fileName;
+ private float contentLength;
+ private String contentType;
+
+ public AudioInfo(
+ AudioInputStream audioData, String fileName, float contentLength, String contentType) {
+ this.audioData = AudioExtensionConverter.mp3ToWav(audioData);
+ this.fileName = fileName;
+ this.contentLength = contentLength;
+ this.contentType = contentType;
+ }
+
+ private byte[] getAudioBytes(AudioInputStream audioStream) {
+
+ try {
+ return audioStream.readAllBytes();
+ } catch (IOException e) {
+ throw new RuntimeException("์ค๋์ค ๋ณํ ์คํจ", e);
+ }
+ }
+
+ public Long getContentSize() {
+ return (long) audioData.length;
+ }
+
+ public InputStream toInputStream() {
+ return new ByteArrayInputStream(audioData);
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/LambdaConcatResultDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/LambdaConcatResultDto.java
new file mode 100644
index 00000000..d4748e85
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/lambda/response/LambdaConcatResultDto.java
@@ -0,0 +1,54 @@
+package com.oreo.finalproject_5re5_be.concat.dto.lambda.response;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class LambdaConcatResultDto {
+ private final AudioInfo info;
+ private final List processed;
+ private final String s3Url;
+ private final String contentType;
+ private final String processId;
+ private final int i;
+
+ @JsonCreator
+ public LambdaConcatResultDto(
+ @JsonProperty("info") AudioInfo info,
+ @JsonProperty("processed") List processed,
+ @JsonProperty("s3Url") String s3Url,
+ @JsonProperty("contentType") String contentType,
+ @JsonProperty("processId") String processId,
+ @JsonProperty("i") int i) {
+ this.info = info;
+ this.processed = processed;
+ this.s3Url = s3Url;
+ this.contentType = contentType;
+ this.processId = processId;
+ this.i = i;
+ }
+
+ @Override
+ public String toString() {
+ return "LambdaConcatResultDto{"
+ + ", processed="
+ + processed
+ + ", s3Url='"
+ + s3Url
+ + '\''
+ + ", contentType='"
+ + contentType
+ + '\''
+ + ", processId='"
+ + processId
+ + '\''
+ + ", i="
+ + i
+ + '}';
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileDto.java
index 7ad0c8c6..e5ff6141 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileDto.java
@@ -1,12 +1,11 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
+import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-import java.time.LocalDateTime;
-
@ToString
@Builder
@AllArgsConstructor
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileRequestDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileRequestDto.java
index 47635c5e..e6459edb 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileRequestDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFileRequestDto.java
@@ -16,5 +16,4 @@ public AudioFileRequestDto(String fileName) {
this.fileName = fileName;
this.audioFile = null;
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFormatRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFormatRequest.java
index 8393cdaf..4e9f354c 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFormatRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/AudioFormatRequest.java
@@ -1,6 +1,5 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
-
import lombok.*;
@Getter
@@ -18,5 +17,4 @@ public class AudioFormatRequest {
private Integer frameSize;
private Short frameRate;
private Character isBigEndian;
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/BgmFunctionRequestDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/BgmFunctionRequestDto.java
index 771e1353..eb850917 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/BgmFunctionRequestDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/BgmFunctionRequestDto.java
@@ -1,9 +1,7 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
-
-import lombok.*;
-
import java.util.List;
+import lombok.*;
@Getter
@Setter
@@ -19,7 +17,7 @@ public class BgmFunctionRequestDto {
private String bgmFileUrl;
// ๊ฒฐ๊ณผ ํ์ผ S3์ ์ ์ฅ์ ํ์ํ ์ ๋ณด
private String concatResultFileName;
-
+
@Getter
@Setter
@Builder
@@ -29,5 +27,4 @@ public static class Row {
private String audioUrl; // S3 URL ๋๋ ํ์ผ ๊ฒฝ๋ก
private float silenceInterval; // ํด๋น ํ ๋ค์ ์ฝ์
๋ ๋ฌด์ ๊ฐ๊ฒฉ
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatResultRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatResultRequest.java
index eaf1eb60..02910b06 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatResultRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatResultRequest.java
@@ -2,9 +2,8 @@
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
-import lombok.*;
-
import java.time.LocalDateTime;
+import lombok.*;
@Getter
@Setter
@@ -38,5 +37,4 @@ public class ConcatResultRequest {
@NotNull(message = "createdDateTime ํ๋๋ null ์ผ ์ ์์ต๋๋ค.")
private LocalDateTime CreatedDateTime;
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequest.java
index 904591bd..78f58b3d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequest.java
@@ -12,11 +12,11 @@
@ToString
@NoArgsConstructor
@AllArgsConstructor
-public class ConcatRowRequest { //ํ๋ฉด์ ์ ์ฅํ๊ธฐ ์ํด SelectedConcatRowRequest์ ๋ฌ๋ฆฌ selected์ฌ๋ถ๋ ์ ์ฅํด์ผํจ
+public class ConcatRowRequest { // ํ๋ฉด์ ์ ์ฅํ๊ธฐ ์ํด SelectedConcatRowRequest์ ๋ฌ๋ฆฌ selected์ฌ๋ถ๋ ์ ์ฅํด์ผํจ
private Long seq;
@NotNull(message = "originAudioRequest ํ๋๋ null ์ผ ์ ์์ต๋๋ค.")
- private OriginAudioRequest originAudioRequest; //ํ๋ง๋ค ๋งค์นญ๋๋ ์๋ณธ ์ค๋์คํ์ผ
+ private OriginAudioRequest originAudioRequest; // ํ๋ง๋ค ๋งค์นญ๋๋ ์๋ณธ ์ค๋์คํ์ผ
@Size(max = 255, message = "rowText ํ๋๋ ์ต๋ 255์๊น์ง ํ์ฉ๋ฉ๋๋ค.")
private String rowText;
@@ -31,7 +31,7 @@ public class ConcatRowRequest { //ํ๋ฉด์ ์ ์ฅํ๊ธฐ ์ํด SelectedConcatRo
@Positive(message = "rowIndex ํ๋๋ ์์์ฌ์ผ ํฉ๋๋ค.")
@NotNull(message = "rowIndex ํ๋๋ null ์ผ ์ ์์ต๋๋ค.")
- private Integer rowIndex; //ํ ์์
+ private Integer rowIndex; // ํ ์์
private Character status;
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequestDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequestDto.java
index 82d6ce47..6f71cd4c 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequestDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowRequestDto.java
@@ -1,22 +1,16 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
import jakarta.validation.constraints.NotNull;
+import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
-import java.util.List;
-
@ToString
@Getter
@AllArgsConstructor
public class ConcatRowRequestDto {
- @NotNull
- private Long concatTabId;
- @NotNull
- private Long memberSeq;
- @NotNull
- private String fileName;
- @NotNull
- private List concatRowRequests;
+ @NotNull private Long concatTabId;
+ @NotNull private String fileName;
+ @NotNull private List concatRowRequests;
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowSaveRequestDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowSaveRequestDto.java
index b59c25aa..c1f5f21c 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowSaveRequestDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatRowSaveRequestDto.java
@@ -1,11 +1,10 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
+import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
-import java.util.List;
-
@ToString
@Getter
@AllArgsConstructor
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatTabRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatTabRequest.java
index 5b5daa22..90c6d773 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatTabRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatTabRequest.java
@@ -2,7 +2,6 @@
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PositiveOrZero;
-
import java.util.List;
public class ConcatTabRequest {
@@ -15,5 +14,5 @@ public class ConcatTabRequest {
@NotNull(message = "frontSilence ํ๋๋ null ์ผ ์ ์์ต๋๋ค.")
private Float frontSilence;
- private String BgmFileUrl; //์์ ์๋ ์์
+ private String BgmFileUrl; // ์์ ์๋ ์์
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatUpdateRequestDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatUpdateRequestDto.java
index 6a7634cd..5650129e 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatUpdateRequestDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/ConcatUpdateRequestDto.java
@@ -1,12 +1,11 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
+import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-import java.util.List;
-
@ToString
@AllArgsConstructor
@Builder
@@ -16,5 +15,4 @@ public class ConcatUpdateRequestDto {
private final float frontSilence;
private final Character status;
private final List bgmFileList; // BgmFile ์ ๋ณด ๋ฆฌ์คํธ
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/OriginAudioRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/OriginAudioRequest.java
index 5f957e4b..21afe563 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/OriginAudioRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/OriginAudioRequest.java
@@ -10,7 +10,7 @@
@ToString
@NoArgsConstructor
@AllArgsConstructor
-public class OriginAudioRequest { //์์ํ ์ค๋์ค ํ์ผ
+public class OriginAudioRequest { // ์์ํ ์ค๋์ค ํ์ผ
private Long seq;
@Size(max = 1024, message = "fileUrl ํ๋๋ ์ต๋ 1024์๊น์ง ํ์ฉ๋ฉ๋๋ค.")
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/SelectedConcatRowRequest.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/SelectedConcatRowRequest.java
index 6513ee3f..6dcfb734 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/SelectedConcatRowRequest.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/request/SelectedConcatRowRequest.java
@@ -1,8 +1,7 @@
package com.oreo.finalproject_5re5_be.concat.dto.request;
-import lombok.*;
-
import java.util.List;
+import lombok.*;
@Getter
@Setter
@@ -23,5 +22,4 @@ public static class Row {
private String audioUrl; // S3 URL ๋๋ ํ์ผ ๊ฒฝ๋ก
private float silenceInterval; // ํด๋น ํ ๋ค์ ์ฝ์
๋ ๋ฌด์ ๊ฐ๊ฒฉ
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultDetailsResponse.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultDetailsResponse.java
index 0934c6dd..4179a780 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultDetailsResponse.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultDetailsResponse.java
@@ -9,14 +9,14 @@
@Builder
public class ConcatResultDetailsResponse {
- private Long concatTabSeq; //๊ฐ์ฒด๊ฐ ์๋ seq๋ฅผ ๋ฐํ
- private Long concatOptionSeq; //๊ฐ์ฒด๊ฐ ์๋ seq๋ฅผ ๋ฐํ
+ private Long concatTabSeq; // ๊ฐ์ฒด๊ฐ ์๋ seq๋ฅผ ๋ฐํ
+ private Long concatOptionSeq; // ๊ฐ์ฒด๊ฐ ์๋ seq๋ฅผ ๋ฐํ
private String audioUrl;
private String extension;
private Float fileLength;
private String fileName;
- //format ๊ด๋ จ ํ๋
+ // format ๊ด๋ จ ํ๋
private String encoding;
private Float sampleRate;
private Integer sampleSizeBit;
@@ -24,6 +24,4 @@ public class ConcatResultDetailsResponse {
private Integer frameSize;
private Float frameRate;
private Character isBigEndian;
-
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultResponse.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultResponse.java
index 8c676300..347c4bbf 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultResponse.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatResultResponse.java
@@ -1,11 +1,10 @@
package com.oreo.finalproject_5re5_be.concat.dto.response;
import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
+import java.util.List;
import lombok.Builder;
import lombok.Getter;
-import java.util.List;
-
@Builder
@Getter
public class ConcatResultResponse {
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatRowTabResponseDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatRowTabResponseDto.java
index 2360fc08..13efb3c9 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatRowTabResponseDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatRowTabResponseDto.java
@@ -1,15 +1,13 @@
package com.oreo.finalproject_5re5_be.concat.dto.response;
import com.oreo.finalproject_5re5_be.concat.dto.RowAudioFileDto;
+import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
-import java.util.List;
-
@Getter
@AllArgsConstructor
public class ConcatRowTabResponseDto {
private ConcatTabResponseDto concatTab;
private List audioFiles;
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatTabResponseDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatTabResponseDto.java
index d5897c3c..3dfcd5ea 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatTabResponseDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatTabResponseDto.java
@@ -1,13 +1,12 @@
package com.oreo.finalproject_5re5_be.concat.dto.response;
import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
+import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-import java.util.List;
-
@ToString
@Getter
@Builder
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatUrlResponse.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatUrlResponse.java
index 0f8263b9..1926da9d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatUrlResponse.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/ConcatUrlResponse.java
@@ -1,6 +1,5 @@
package com.oreo.finalproject_5re5_be.concat.dto.response;
-
import lombok.*;
@Getter
@@ -10,7 +9,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class ConcatUrlResponse {
- //์กฐํ, ์ ์ฅ ํ ์ถ๋ ฅํ SEQ์ URL
+ // ์กฐํ, ์ ์ฅ ํ ์ถ๋ ฅํ SEQ์ URL
private Long seq;
private String url;
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/TabRowResponseDto.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/TabRowResponseDto.java
index f26dbeaf..a5fe8d99 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/TabRowResponseDto.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/dto/response/TabRowResponseDto.java
@@ -5,7 +5,6 @@
import lombok.Getter;
import lombok.ToString;
-
@Getter
@AllArgsConstructor
@ToString
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/AudioFile.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/AudioFile.java
index 7d883a47..6fc6b997 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/AudioFile.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/AudioFile.java
@@ -1,13 +1,11 @@
package com.oreo.finalproject_5re5_be.concat.entity;
-
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import jakarta.persistence.*;
+import java.time.LocalDateTime;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
-import java.time.LocalDateTime;
-
@ToString
@Getter
@Builder
@@ -21,8 +19,8 @@ public class AudioFile extends BaseEntity {
@SequenceGenerator(
name = "audio_file_seq_generator",
sequenceName = "audio_file_seq", // ์ค์ ์ํ์ค ์ด๋ฆ
- allocationSize = 1 // ID๋ฅผ ํ๋์ฉ ํ ๋น
- )
+ allocationSize = 1 // ID๋ฅผ ํ๋์ฉ ํ ๋น
+ )
@Column(name = "audio_file_seq")
private Long audioFileSeq;
@@ -30,17 +28,13 @@ public class AudioFile extends BaseEntity {
@JoinColumn(name = "concat_row_seq")
private ConcatRow concatRow;
-
-
private String audioUrl;
private String extension;
private Long fileSize;
private Long fileLength;
private String fileName;
+
@CreatedDate
@Column(updatable = false, name = "created_date")
private LocalDateTime createdDate;
-
-
}
-
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/BgmFile.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/BgmFile.java
index 01964ad5..f2c158e7 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/BgmFile.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/BgmFile.java
@@ -1,14 +1,11 @@
package com.oreo.finalproject_5re5_be.concat.entity;
-
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import jakarta.persistence.*;
+import java.time.LocalDateTime;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
-import java.time.LocalDateTime;
-
-@ToString
@Getter
@Builder
@AllArgsConstructor
@@ -21,10 +18,13 @@ public class BgmFile extends BaseEntity {
@Column(name = "bgm_file_seq")
private Long bgmFileSeq;
+ @ToString.Exclude
@ManyToOne
@JoinColumn(name = "concat_tab_seq") // ์ธ๋ ํค: concat_tab์ ID
private ConcatTab concatTab;
+ @Setter
+ @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "concat_result_seq", nullable = true)
private ConcatResult concatResult;
@@ -34,10 +34,8 @@ public class BgmFile extends BaseEntity {
private Long fileSize;
private Long fileLength;
private String fileName;
+
@CreatedDate
@Column(updatable = false, name = "created_date")
private LocalDateTime createdDate;
-
-
}
-
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatResult.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatResult.java
index d34d8d5c..329f165a 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatResult.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatResult.java
@@ -2,10 +2,9 @@
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import jakarta.persistence.*;
-import lombok.*;
-
import java.util.ArrayList;
import java.util.List;
+import lombok.*;
@ToString
@Getter
@@ -24,6 +23,7 @@ public class ConcatResult extends BaseEntity {
@JoinColumn(name = "pro_seq")
private ConcatTab concatTab;
+ @ToString.Exclude
@OneToMany(mappedBy = "concatResult", cascade = CascadeType.ALL, orphanRemoval = true)
private List bgmFiles = new ArrayList<>();
@@ -42,4 +42,23 @@ public class ConcatResult extends BaseEntity {
@Column(name = "file_size")
private Long fileSize;
+ @Column(name = "process_id")
+ private String processId;
+
+ @Column private Integer seperated;
+
+ public void addBgmFile(BgmFile bgmFile) {
+ this.bgmFiles.add(
+ BgmFile.builder()
+ .concatResult(this)
+ .audioUrl(bgmFile.getAudioUrl())
+ .fileName(bgmFile.getFileName())
+ .fileLength(bgmFile.getFileLength())
+ .extension(bgmFile.getExtension())
+ .build());
+ }
+
+ public void addBgmFiles(List bgmFiles) {
+ bgmFiles.forEach(this::addBgmFile);
+ }
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRow.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRow.java
index 4294bf39..a8950287 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRow.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRow.java
@@ -4,7 +4,6 @@
import jakarta.persistence.*;
import lombok.*;
-@ToString
@Getter
@Builder
@AllArgsConstructor
@@ -18,26 +17,27 @@ public class ConcatRow extends BaseEntity {
@SequenceGenerator(
name = "concat_row_seq_generator",
sequenceName = "concat_row_seq", // ์ค์ ์ํ์ค ์ด๋ฆ
- allocationSize = 1 // ID๋ฅผ ํ๋์ฉ ํ ๋น
- )
+ allocationSize = 1 // ID๋ฅผ ํ๋์ฉ ํ ๋น
+ )
@Column(name = "concat_row_seq")
private Long concatRowSeq;
-
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "pro_seq")
private ConcatTab concatTab;
@Column(name = "row_text")
private String rowText;
+
@Column(name = "selected")
private Character selected;
+
@Column(name = "silence")
private Float silence;
+
@Column(name = "row_index")
private Integer rowIndex;
+
@Column(name = "status")
private Character status;
-
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRowLog.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRowLog.java
index 185b201c..f82a1ee1 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRowLog.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatRowLog.java
@@ -2,9 +2,8 @@
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import jakarta.persistence.*;
-import lombok.*;
-
import java.time.LocalDateTime;
+import lombok.*;
@ToString
@Getter
@@ -28,5 +27,4 @@ public class ConcatRowLog extends BaseEntity {
private String RequestContext;
private Character selected;
private Float silence;
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatTab.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatTab.java
index 042b95e9..b982b19d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatTab.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/ConcatTab.java
@@ -3,22 +3,19 @@
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import com.oreo.finalproject_5re5_be.project.entity.Project;
import jakarta.persistence.*;
-import lombok.*;
-
import java.util.List;
+import lombok.*;
-@ToString
@Getter
@Builder
@NoArgsConstructor
-@AllArgsConstructor
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Entity(name = "concat_tab")
public class ConcatTab extends BaseEntity {
- @Id
- private Long projectId;
+ @Id private Long projectId;
@MapsId // Project ์ํฐํฐ์ ID๋ฅผ ConcatTab์ ID๋ก ์ฌ์ฉ
- @OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
+ @OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "pro_seq")
private Project project;
@@ -28,13 +25,23 @@ public class ConcatTab extends BaseEntity {
@Column(name = "front_silence")
private Float frontSilence;
+ @ToString.Exclude
// ํ๋์ ConcatTab์ ์ฌ๋ฌ bgmFile๋ค ๋งค์นญ
- @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "concatTab", fetch = FetchType.EAGER)
- @Column(nullable = true)
- @Setter
+ @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "concatTab", fetch = FetchType.LAZY)
private List bgmFiles;
-
+ public void addBgmFile(BgmFile bgmFile) {
+ bgmFiles.add(
+ BgmFile.builder()
+ .concatTab(this)
+ .audioUrl(bgmFile.getAudioUrl())
+ .fileName(bgmFile.getFileName())
+ .fileLength(bgmFile.getFileLength())
+ .extension(bgmFile.getExtension())
+ .build());
+ }
+
+ public void addBgmFile(List bgmFiles) {
+ bgmFiles.forEach(this::addBgmFile);
+ }
}
-
-
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/MaterialAudio.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/MaterialAudio.java
index 2843486b..f3656a0a 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/MaterialAudio.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/entity/MaterialAudio.java
@@ -1,5 +1,6 @@
package com.oreo.finalproject_5re5_be.concat.entity;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.oreo.finalproject_5re5_be.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
@@ -18,12 +19,16 @@ public class MaterialAudio extends BaseEntity {
@ManyToOne
@JoinColumn(name = "concat_result_seq")
+ @ToString.Exclude // ์ํ ์ฐธ์กฐ ๋ฐฉ์ง
+ @JsonIgnore // JSON ์ง๋ ฌํ์์ ์ ์ธ
private ConcatResult concatResult;
@ManyToOne
@JoinColumn(name = "audio_file_seq")
+ @ToString.Exclude // ์ํ ์ฐธ์กฐ ๋ฐฉ์ง
+ @JsonIgnore // JSON ์ง๋ ฌํ์์ ์ ์ธ
private AudioFile audioFile;
- @Column(name ="method")
+ @Column(name = "method")
private String method;
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/AudioFileRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/AudioFileRepository.java
index 9e9f9fa7..b08e8aec 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/AudioFileRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/AudioFileRepository.java
@@ -1,6 +1,9 @@
package com.oreo.finalproject_5re5_be.concat.repository;
import com.oreo.finalproject_5re5_be.concat.entity.AudioFile;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -8,14 +11,10 @@
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Optional;
-
@Repository
public interface AudioFileRepository extends JpaRepository {
- Optional findByAudioUrl(String audioUrl);
+ // Optional findByAudioUrl(String audioUrl);
Optional findByFileName(String filename);
@@ -25,42 +24,52 @@ public interface AudioFileRepository extends JpaRepository {
@Query("SELECT af FROM audio_file af WHERE FUNCTION('DATE', af.createdDate) = :date")
List findByCreatedDateOnly(LocalDate date);
- //ํ์ด์ง ์ฒ๋ฆฌํด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ชจ๋ ๊ฐ์ ธ์ค์ง ์๊ณ ํ์ํ ๋งํผ๋ง ๋๋ ์ ์ฒ๋ฆฌ
+ // ํ์ด์ง ์ฒ๋ฆฌํด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ชจ๋ ๊ฐ์ ธ์ค์ง ์๊ณ ํ์ํ ๋งํผ๋ง ๋๋ ์ ์ฒ๋ฆฌ
Page findByExtension(String extension, Pageable pageable);
- @Query(value = "SELECT * FROM audio_file" +
- " WHERE concat_row_seq IN (:concatRowSeq)", nativeQuery = true)
+ @Query(
+ value = "SELECT * FROM audio_file" + " WHERE concat_row_seq IN (:concatRowSeq)",
+ nativeQuery = true)
List findAllByConcatRowSeq(@Param("concatRowSeq") List concatRowSeq);
-
void deleteById(Long seq);
- @Query("SELECT af.concatRow.concatRowSeq FROM audio_file af WHERE af.audioFileSeq IN :audioFileSeqs")
+ @Query(
+ "SELECT af.concatRow.concatRowSeq FROM audio_file af WHERE af.audioFileSeq IN :audioFileSeqs")
List findConcatRowSeqsByAudioFileSeqs(List audioFileSeqs);
- @Query(value = "SELECT * FROM audio_file" +
- " WHERE concat_row_seq IN (:concatRowSeq)", nativeQuery = true)
+ @Query(
+ value = "SELECT * FROM audio_file" + " WHERE concat_row_seq IN (:concatRowSeq)",
+ nativeQuery = true)
List findAllByConcatRowSeqs(@Param("concatRowSeq") List concatRowSeqs);
- @Query("SELECT af FROM audio_file af " +
- "JOIN af.concatRow cr " +
- "JOIN cr.concatTab p " +
- "WHERE p.project.member.seq = :member_seq")
+ @Query(
+ "SELECT af FROM audio_file af "
+ + "JOIN af.concatRow cr "
+ + "JOIN cr.concatTab p "
+ + "WHERE p.project.member.seq = :member_seq")
List findAudioFileByMember(@Param("member_seq") Long memberSeq, Pageable pageable);
- @Query("SELECT COUNT(af) FROM audio_file af " +
- "JOIN af.concatRow cr " +
- "JOIN cr.concatTab p " +
- "WHERE p.project.member.seq = :memberSeq")
+ @Query(
+ "SELECT COUNT(af) FROM audio_file af "
+ + "JOIN af.concatRow cr "
+ + "JOIN cr.concatTab p "
+ + "WHERE p.project.member.seq = :memberSeq")
long countByMemberSeq(@Param("memberSeq") Long memberSeq);
@Query("SELECT a FROM audio_file a WHERE a.audioFileSeq = :audioFileSeq")
AudioFile findAudioFileById(Long audioFileSeq);
- @Query("SELECT af FROM audio_file af" +
- " JOIN af.concatRow cr" +
- " JOIN cr.concatTab ct" +
- " WHERE ct.projectId = :proSeq" +
- " AND cr.status = 'Y'")
+ @Query(
+ "SELECT af FROM audio_file af"
+ + " JOIN af.concatRow cr"
+ + " JOIN cr.concatTab ct"
+ + " WHERE ct.projectId = :proSeq"
+ + " AND cr.status = 'Y'")
List findAudioFileByProjectSeq(@Param("proSeq") Long projectSeq);
+
+ @Query(
+ value = "SELECT * FROM audio_file WHERE audio_file_seq = :audioFileSeq ",
+ nativeQuery = true)
+ Optional findByAudioFileSeq(Long audioFileSeq);
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/BgmFileRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/BgmFileRepository.java
index b4ea174b..2e103621 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/BgmFileRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/BgmFileRepository.java
@@ -1,13 +1,13 @@
package com.oreo.finalproject_5re5_be.concat.repository;
import com.oreo.finalproject_5re5_be.concat.entity.BgmFile;
+import java.util.List;
+import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
-import java.util.List;
-
@Repository
public interface BgmFileRepository extends JpaRepository {
// concatTab seq์ ๋ค์ด๊ฐ๋ bgmFile ์ ๋ณด๋ค ์กฐํ
@@ -18,4 +18,8 @@ public interface BgmFileRepository extends JpaRepository {
@Query("SELECT b FROM bgm_file b WHERE b.concatResult.concatResultSequence = :resultSeq")
List findByConcatResultSeq(@Param("resultSeq") Long concatResultSeq);
+ Optional findByAudioUrl(String audioUrl);
+
+ // ํน์ audioUrl๋ก ๋ชจ๋ BgmFile ์กฐํ
+ List findAllByAudioUrl(String audioUrl);
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatResultRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatResultRepository.java
index 0fac9786..b4914989 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatResultRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatResultRepository.java
@@ -1,14 +1,13 @@
package com.oreo.finalproject_5re5_be.concat.repository;
import com.oreo.finalproject_5re5_be.concat.entity.ConcatResult;
+import java.util.List;
+import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
-import java.util.List;
-import java.util.Optional;
-
@Repository
public interface ConcatResultRepository extends JpaRepository {
Optional findByConcatResultSequence(Long concatResultSeq);
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowLogRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowLogRepository.java
index 39dd50b1..e4a0c4fc 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowLogRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowLogRepository.java
@@ -5,5 +5,4 @@
import org.springframework.stereotype.Repository;
@Repository
-public interface ConcatRowLogRepository extends JpaRepository {
-}
+public interface ConcatRowLogRepository extends JpaRepository {}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowRepository.java
index 8f12457d..201a7e50 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatRowRepository.java
@@ -1,33 +1,29 @@
package com.oreo.finalproject_5re5_be.concat.repository;
import com.oreo.finalproject_5re5_be.concat.entity.ConcatRow;
+import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
-import java.util.List;
-
@Repository
public interface ConcatRowRepository extends JpaRepository {
List findByStatusAndConcatTab_Project_ProSeq(Character status, Long projectSeq);
+
@Modifying
- @Query(value = "UPDATE concat_row " +
- "SET status = :status " +
- "WHERE concat_row_seq IN :concatRowSeq",
+ @Query(
+ value =
+ "UPDATE concat_row " + "SET status = :status " + "WHERE concat_row_seq IN :concatRowSeq",
nativeQuery = true)
- int updateStatusByConcatRowSeq(@Param("concatRowSeq") List concatRowSeq,
- @Param("status") Character status);
+ int updateStatusByConcatRowSeq(
+ @Param("concatRowSeq") List concatRowSeq, @Param("status") Character status);
List findByConcatRowSeq(long concatRowSequence);
-
- @Query(value = "SELECT concat_row_seq " +
- " FROM concat_row" +
- " WHERE pro_seq=:proSeq",
+ @Query(
+ value = "SELECT concat_row_seq " + " FROM concat_row" + " WHERE pro_seq=:proSeq",
nativeQuery = true)
List findConcatRowIdByProjectSeq(@Param("proSeq") Long projectSeq);
-
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabLogRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabLogRepository.java
index e63df093..40f7885c 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabLogRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabLogRepository.java
@@ -5,5 +5,4 @@
import org.springframework.stereotype.Repository;
@Repository
-public interface ConcatTabLogRepository extends JpaRepository {
-}
+public interface ConcatTabLogRepository extends JpaRepository {}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabRepository.java
index ff7744ac..26b691ca 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/ConcatTabRepository.java
@@ -5,5 +5,4 @@
import org.springframework.stereotype.Repository;
@Repository
-public interface ConcatTabRepository extends JpaRepository {
-}
+public interface ConcatTabRepository extends JpaRepository {}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/MaterialAudioRepository.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/MaterialAudioRepository.java
index 5b80b626..c8847c0a 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/MaterialAudioRepository.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/repository/MaterialAudioRepository.java
@@ -4,30 +4,33 @@
import com.oreo.finalproject_5re5_be.concat.entity.ConcatResult;
import com.oreo.finalproject_5re5_be.concat.entity.ConcatRow;
import com.oreo.finalproject_5re5_be.concat.entity.MaterialAudio;
+import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
-import java.util.List;
-
@Repository
public interface MaterialAudioRepository extends JpaRepository {
- @Query("SELECT ma.audioFile FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :resultSeq")
+ @Query(
+ "SELECT ma.audioFile FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :resultSeq")
List findAudioFilesByConcatResult(Long resultSeq);
- @Query("SELECT ma.concatResult FROM material_audio ma WHERE ma.audioFile.audioFileSeq = :audioFileSeq")
+ @Query(
+ "SELECT ma.concatResult FROM material_audio ma WHERE ma.audioFile.audioFileSeq = :audioFileSeq")
List findConcatResultsByAudioFileSeq(Long audioFileSeq);
@Modifying(clearAutomatically = true) // ๋ณ๊ฒฝ ํ ์๋์ผ๋ก ์์์ฑ ์ปจํ
์คํธ๋ฅผ ์ด๊ธฐํ
- @Query("DELETE FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
+ @Query(
+ "DELETE FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
void deleteByConcatResultSeq(Long concatResultSeq);
-
- @Query("SELECT ma FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
+
+ @Query(
+ "SELECT ma FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
List findByConcatResultSeq(Long concatResultSeq);
- @Query("SELECT ma.audioFile.concatRow FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
+ @Query(
+ "SELECT ma.audioFile.concatRow FROM material_audio ma WHERE ma.concatResult.concatResultSequence = :concatResultSeq")
List findConcatRowListByConcatResultSeq(Long concatResultSeq);
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioFileService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioFileService.java
index 8cf2fae7..e9f6508d 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioFileService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioFileService.java
@@ -11,17 +11,6 @@
import com.oreo.finalproject_5re5_be.concat.service.helper.AudioFileHelper;
import com.oreo.finalproject_5re5_be.global.component.S3Service;
import com.oreo.finalproject_5re5_be.global.exception.DataNotFoundException;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Service;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
@@ -31,7 +20,16 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
@@ -44,7 +42,8 @@ public class AudioFileService {
// audioFile seq๋ก audioFile ์ ๋ณด ์กฐํ (1๊ฐ)
public AudioFile getAudioFile(Long audioFileSeq) {
- return audioFileRepository.findById(audioFileSeq)
+ return audioFileRepository
+ .findById(audioFileSeq)
.orElseThrow(() -> new RuntimeException("Audio file not found"));
}
@@ -54,60 +53,61 @@ public List getAudioFilesByProjectAndStatusTrue(Long projectSeq
}
// audioFile Url๋ก audioFile ์ ๋ณด ์กฐํ (1๊ฐ)
- public AudioFile getAudioFileByUrl(String audioUrl) {
- return audioFileRepository.findByAudioUrl(audioUrl)
- .orElseThrow(() -> new IllegalArgumentException("AudioFile not found with URL: " + audioUrl));
- }
-
- // audioFile Url๋ก audioFileSeq ์ ๋ณด ์กฐํ (N๊ฐ)
- public List getAudioFileSeqsByUrls(List audioUrls) {
- return audioUrls.stream()
- .map(url -> getAudioFileByUrl(url).getAudioFileSeq()) // URL๋ก AudioFile ์กฐํ ํ Seq ์ถ์ถ
- .toList();
+ public AudioFile getAudioFileByUrl(Long audioSeq) {
+ return audioFileRepository
+ .findByAudioFileSeq(audioSeq)
+ .orElseThrow(
+ () -> new IllegalArgumentException("AudioFile not found with URL: " + audioSeq));
}
// audioFile Name์ผ๋ก audioFile ์ ๋ณด ์กฐํ (1๊ฐ)
public AudioFile getAudioFileByName(String fileName) {
- return audioFileRepository.findByFileName(fileName)
- .orElseThrow(() -> new IllegalArgumentException("AudioFile not found with fileName: " + fileName));
+ return audioFileRepository
+ .findByFileName(fileName)
+ .orElseThrow(
+ () -> new IllegalArgumentException("AudioFile not found with fileName: " + fileName));
}
-
// concatRow์ seq๋ฅผ ๋ฐ์์ ๊ทธ์ ๋งค์นญ๋๋ audioFile ์ ๋ณด ์กฐํ (1๊ฐ)
public AudioFile getAudioFileByRowSeq(Long rowSeq) {
- return audioFileRepository.findByRowSeq(rowSeq)
- .orElseThrow(() -> new IllegalArgumentException("AudioFile not found for concatRowSeq: " + rowSeq));
+ return audioFileRepository
+ .findByRowSeq(rowSeq)
+ .orElseThrow(
+ () -> new IllegalArgumentException("AudioFile not found for concatRowSeq: " + rowSeq));
}
// concatRow์ seq๋ฅผ ๋ฐ์์ ๊ทธ์ ๋งค์นญ๋๋ audioFile ์ ๋ณด ์กฐํ (n๊ฐ)
public List getAudioFileByRowSeq(List rowSeq) {
return audioFileRepository.findAllByConcatRowSeqs(rowSeq).stream()
- .map(this::convertToAudioFileDto).toList();
+ .map(this::convertToAudioFileDto)
+ .toList();
}
-
// ๋ ์ง๋ฅผ ๋ฐ์์ ๋งค์นญ๋๋ audioFile ์ ๋ณด ์กฐํ (N๊ฐ)
public List getAudioFilesByCreatedDate(LocalDate date) {
- //๋งค์นญ๋๋ ์ค๋์คํ์ผ์ ๋ฆฌ์คํธ๋ก ์ ์ฅ
+ // ๋งค์นญ๋๋ ์ค๋์คํ์ผ์ ๋ฆฌ์คํธ๋ก ์ ์ฅ
List audioFiles = audioFileRepository.findByCreatedDateOnly(date);
if (audioFiles.isEmpty()) {
- throw new IllegalArgumentException("No AudioFiles found with the specified created date: " + date);
+ throw new IllegalArgumentException(
+ "No AudioFiles found with the specified created date: " + date);
}
return audioFiles;
}
-
// ํ์ผํ์ฅ์๋ก ์ค๋์คํ์ผ๋ค์ ํ์ด์ง์ฒ๋ฆฌํด์ ์กฐํ (N๊ฐ)
- public List findAudioFilesByExtensionWithPaging(String extension, int page, int size) {
+ public List findAudioFilesByExtensionWithPaging(
+ String extension, int page, int size) {
Pageable pageable = PageRequest.of(page, size); // ํ์ด์ง ๋ฒํธ์ ํฌ๊ธฐ๋ฅผ ์ค์
Page audioFilePage = audioFileRepository.findByExtension(extension, pageable);
// AudioFile -> ConcatUrlResponse ๋ณํ
return audioFilePage.getContent().stream()
- .map(file -> ConcatUrlResponse.builder()
- .seq(file.getAudioFileSeq())
- .url(file.getAudioUrl())
- .build())
+ .map(
+ file ->
+ ConcatUrlResponse.builder()
+ .seq(file.getAudioFileSeq())
+ .url(file.getAudioUrl())
+ .build())
.collect(Collectors.toList());
}
@@ -116,10 +116,9 @@ public List findByConcatRowSeq(List concatRowSeq) {
return audioFiles.stream().map(this::convertToAudioFileDto).collect(Collectors.toList());
}
-
// AudioFile seq๋ก ์ญ์ (1๊ฐ)
public void deleteAudioFileBySeq(Long audioFileSeq) {
- //๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ธ
+ // ๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ธ
if (!audioFileRepository.existsById(audioFileSeq)) {
throw new IllegalArgumentException("Audio file not found with seq: " + audioFileSeq);
}
@@ -129,7 +128,7 @@ public void deleteAudioFileBySeq(Long audioFileSeq) {
// AudioFile seq๋ก ์ญ์ (N๊ฐ)
public void deleteAudioFilesBySeq(List audioFileSeqList) {
for (Long seq : audioFileSeqList) {
- //๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ธ
+ // ๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ธ
if (!audioFileRepository.existsById(seq)) {
throw new IllegalArgumentException("Audio file not found with seq: " + seq);
}
@@ -142,7 +141,8 @@ public List findConcatRowSeqsByAudioFileSeqs(List audioFileSeqs) {
return audioFileRepository.findConcatRowSeqsByAudioFileSeqs(audioFileSeqs);
}
- public List checkExtension(List audioDto) throws IOException {
+ public List checkExtension(List audioDto)
+ throws IOException {
List notSupported = new ArrayList<>();
@@ -153,34 +153,38 @@ public List checkExtension(List audioD
continue;
}
- notSupported.add(new AudioFileRequestDto(audioFileRequestDto.getAudioFile().getOriginalFilename()));
+ notSupported.add(
+ new AudioFileRequestDto(audioFileRequestDto.getAudioFile().getOriginalFilename()));
log.info("checkExtension : [{}]", "AUDIO_FILE_CHECK_FAIL");
}
return notSupported;
}
- //s3 ์
๋ก๋
- public List saveAudioFile(List audioDto) throws IOException {
+ // s3 ์
๋ก๋
+ public List saveAudioFile(List audioDto)
+ throws IOException {
if (audioDto.isEmpty()) {
throw new IllegalArgumentException("[AudioFileService.saveAudioFile] ์ค๋์ค ํ์ผ์ด ๋น์ด์์ต๋๋ค.");
}
if (checkExtension(audioDto).isEmpty()) {
- return audioDto.stream().map(dto -> {
- // S3 ์
๋ก๋
- String audioUrl = s3Service.upload(dto.getAudioFile(), "concat/audio");
-
- // AudioFile ์ํฐํฐ ์์ฑ
- try {
- return prepareDto(dto, audioUrl);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }).toList();
+ return audioDto.stream()
+ .map(
+ dto -> {
+ // S3 ์
๋ก๋
+ String audioUrl = s3Service.upload(dto.getAudioFile(), "concat/audio");
+
+ // AudioFile ์ํฐํฐ ์์ฑ
+ try {
+ return prepareDto(dto, audioUrl);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ })
+ .toList();
}
throw new DataNotFoundException("ํ์ผ ํ์์ด ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.");
}
-
public void saveAudioFiles(List audioFiles) {
audioFileHelper.batchInsert(audioFiles);
}
@@ -199,20 +203,22 @@ private OriginAudioRequest prepareDto(AudioFileRequestDto dto, String audioUrl)
}
}
- //์ฌ์ฉ์์ ์ค๋์ค ํ์ผ ์ ์ฒด ์กฐํ
+ // ์ฌ์ฉ์์ ์ค๋์ค ํ์ผ ์ ์ฒด ์กฐํ
public List getMemberAudioFile(Long memberSeq, Pageable pageable) {
List memberAudios = audioFileRepository.findAudioFileByMember(memberSeq, pageable);
- if (memberAudios.isEmpty()) {//ํ์ด์ง ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด null์ ๋ฐํ ํ๋ฏ๋ก ๊ฐ์ฅ ๋ค์ ํ์ด์ง๋ฅผ ๋ฐํ
+ if (memberAudios.isEmpty()) { // ํ์ด์ง ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด null์ ๋ฐํ ํ๋ฏ๋ก ๊ฐ์ฅ ๋ค์ ํ์ด์ง๋ฅผ ๋ฐํ
log.info("์์ฒญ ๊ฐ๋ฅํ ํ์ด์ง ๋ฒํธ ์ด๊ณผ, PageNumber : [{}]", pageable.getPageNumber());
int maxPageNumber = getAudioFilePages(memberSeq, pageable.getPageSize()).size() - 1;
- Pageable maxPageable = PageRequest.of(maxPageNumber, pageable.getPageSize(), pageable.getSort());
- List maxMemberAudios = audioFileRepository.findAudioFileByMember(memberSeq, maxPageable);
+ Pageable maxPageable =
+ PageRequest.of(maxPageNumber, pageable.getPageSize(), pageable.getSort());
+ List maxMemberAudios =
+ audioFileRepository.findAudioFileByMember(memberSeq, maxPageable);
return maxMemberAudios.stream().map(this::convertToAudioFileDto).toList();
}
return memberAudios.stream().map(this::convertToAudioFileDto).toList();
}
- //์ฌ์ฉ์ ์ค๋์ค ํ์ผ ํ์ด์ง ๋ฐฐ์ด ๋ฐํ
+ // ์ฌ์ฉ์ ์ค๋์ค ํ์ผ ํ์ด์ง ๋ฐฐ์ด ๋ฐํ
public List getAudioFilePages(Long memberSeq, int size) {
long totalCount = audioFileRepository.countByMemberSeq(memberSeq);
int totalPages = (int) Math.ceil((double) totalCount / size);
@@ -236,7 +242,6 @@ public static long getFileLength(InputStream inputStream) throws Exception {
}
}
-
public static boolean isAudioFile(File file) {
try (AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file)) {
return true; // ํ์ผ์ด ์ค๋์ค ํ์์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
@@ -254,14 +259,15 @@ public static boolean isAudioFile(InputStream stream) {
}
public static boolean isAudioFile(byte[] stream) {
- try (AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new ByteArrayInputStream(stream))) {
+ try (AudioInputStream audioInputStream =
+ AudioSystem.getAudioInputStream(new ByteArrayInputStream(stream))) {
return true; // ํ์ผ์ด ์ค๋์ค ํ์์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
} catch (UnsupportedAudioFileException | IOException e) {
return false; // ์ค๋์ค ํ์ผ์ด ์๋๊ฑฐ๋ ์ง์ํ์ง ์๋ ํ์
}
}
- //AudioFileDto๋ณํ๊ธฐ
+ // AudioFileDto๋ณํ๊ธฐ
private AudioFileDto convertToAudioFileDto(AudioFile audioFile) {
return AudioFileDto.builder()
.audioFileSeq(audioFile.getAudioFileSeq())
@@ -290,4 +296,4 @@ private RowAudioFileDto convertToRowAudioFileDto(AudioFile audioFile) {
public List saveAll(List audioFiles) {
return audioFileRepository.saveAll(audioFiles);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioMultipartFile.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioMultipartFile.java
index fa8c6e68..49a073ba 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioMultipartFile.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioMultipartFile.java
@@ -1,8 +1,7 @@
package com.oreo.finalproject_5re5_be.concat.service;
-import org.springframework.web.multipart.MultipartFile;
-
import java.io.*;
+import org.springframework.web.multipart.MultipartFile;
public class AudioMultipartFile implements MultipartFile {
private final byte[] data;
@@ -56,5 +55,4 @@ public void transferTo(File dest) throws IOException, IllegalStateException {
out.write(data);
}
}
-
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioStreamService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioStreamService.java
index 37f86022..da3bf8d7 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioStreamService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/AudioStreamService.java
@@ -1,39 +1,47 @@
package com.oreo.finalproject_5re5_be.concat.service;
-import com.oreo.finalproject_5re5_be.concat.dto.request.SelectedConcatRowRequest;
+import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatRowRequest;
+import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatRowSaveRequestDto;
+import com.oreo.finalproject_5re5_be.concat.dto.request.OriginAudioRequest;
import com.oreo.finalproject_5re5_be.concat.service.bgm.BgmProcessor;
import com.oreo.finalproject_5re5_be.concat.service.concatenator.AudioProperties;
import com.oreo.finalproject_5re5_be.global.component.S3Service;
+import com.oreo.finalproject_5re5_be.global.component.audio.AudioExtensionConverter;
+import com.oreo.finalproject_5re5_be.global.component.audio.AudioFormats;
import com.oreo.finalproject_5re5_be.global.component.audio.AudioResample;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import javax.sound.sampled.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Service;
@RequiredArgsConstructor
+@Log4j2
@Service
public class AudioStreamService {
+ private final AudioFormat defaultAudioFormat = AudioFormats.STEREO_FORMAT_SR441_B16; // ๊ธฐ๋ณธ ํฌ๋งท
private final AudioResample audioResample = new AudioResample();
public AudioInputStream createAudioInputStream(ByteArrayOutputStream buffer, AudioFormat format) {
byte[] data = buffer.toByteArray();
- return new AudioInputStream(new ByteArrayInputStream(data), format, data.length / format.getFrameSize());
+ return new AudioInputStream(
+ new ByteArrayInputStream(data), format, data.length / format.getFrameSize());
}
- public AudioInputStream bufferAudioStream(AudioInputStream stream, AudioFormat format) throws IOException {
+ public AudioInputStream bufferAudioStream(AudioInputStream stream, AudioFormat format)
+ throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
AudioSystem.write(stream, AudioFileFormat.Type.WAVE, buffer);
byte[] data = buffer.toByteArray();
- return new AudioInputStream(new ByteArrayInputStream(data), format, data.length / format.getFrameSize());
+ return new AudioInputStream(
+ new ByteArrayInputStream(data), format, data.length / format.getFrameSize());
}
public long getValidFrameLength(AudioInputStream audioStream) throws IOException {
@@ -41,14 +49,78 @@ public long getValidFrameLength(AudioInputStream audioStream) throws IOException
return frameLength > 0 ? frameLength : BgmProcessor.calculateTargetFrames(audioStream);
}
- public List loadAudioFiles(SelectedConcatRowRequest selectedRows) {
+ public List loadAudioFiles(ConcatRowSaveRequestDto selectedRows) {
List audioPropertiesList = new ArrayList<>();
- for (SelectedConcatRowRequest.Row row : selectedRows.getRows()) {
- AudioInputStream audioStream = S3Service.load(row.getAudioUrl());
- audioStream = audioResample.formatting(audioStream); // ๋ฆฌ์ํ๋ง ์ฒ๋ฆฌ
- audioPropertiesList.add(new AudioProperties(audioStream, row.getSilenceInterval()));
+ for (ConcatRowRequest row : selectedRows.getConcatRowRequests()) {
+ OriginAudioRequest originAudio = row.getOriginAudioRequest();
+
+ try {
+ AudioInputStream audioStream = S3Service.load(originAudio.getAudioUrl());
+
+ // ๋ฆฌ์ํ๋ง ์ฒ๋ฆฌ
+ audioStream = audioResample.formatting(audioStream); // ๋ฆฌ์ํ๋ง ์ฒ๋ฆฌ
+ log.info("[loadAudioFiles] ๋ฆฌ์ํ๋ง ์๋ฃ๋ ์ค๋์ค ํฌ๋งท: {}", audioStream.getFormat());
+
+ AudioProperties audioProperties = new AudioProperties(audioStream, row.getRowSilence());
+ log.info(
+ "[loadAudioFiles] ์์ฑ๋ AudioProperties: silenceInterval={}, frameLength={}",
+ row.getRowSilence(),
+ audioStream.getFrameLength());
+
+ audioPropertiesList.add(audioProperties);
+ } catch (Exception e) {
+ log.error(
+ "Failed to load or process audio file from URL: {}", originAudio.getAudioUrl(), e);
+ }
}
return audioPropertiesList;
}
-}
\ No newline at end of file
+ public AudioInputStream loadAsBufferedStream(String s3Url) {
+ try {
+ URL url = new URL(s3Url);
+
+ AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
+ log.info(
+ "[loadAsBufferedStream] AudioInputStream ๊ฐ์ ธ์ค๊ธฐ ์ฑ๊ณต. Format: {}",
+ audioInputStream.getFormat());
+
+ // mp3 -> WAV ๋ณํ
+ byte[] wavData = AudioExtensionConverter.mp3ToWav(audioInputStream);
+
+ // Target Format์ผ๋ก ๋ณํ (formatting)
+ AudioInputStream wavStream =
+ new AudioInputStream(
+ new ByteArrayInputStream(wavData),
+ defaultAudioFormat,
+ wavData.length / defaultAudioFormat.getFrameSize());
+ AudioInputStream formattedStream = audioResample.formatting(wavStream);
+ log.info(
+ "[loadAsBufferedStream] formatting ๋ณํ ์ฑ๊ณต. Frame Length: {}",
+ formattedStream.getFrameLength());
+
+ // ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ฒํผ๋ง
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ AudioSystem.write(formattedStream, AudioFileFormat.Type.WAVE, buffer);
+
+ byte[] bufferedData = buffer.toByteArray();
+ AudioFormat format = formattedStream.getFormat();
+
+ AudioInputStream bufferedStream =
+ new AudioInputStream(
+ new ByteArrayInputStream(bufferedData),
+ format,
+ bufferedData.length / format.getFrameSize());
+
+ return bufferedStream;
+
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("์๋ชป๋ S3 URL์
๋๋ค.", e);
+ } catch (UnsupportedAudioFileException e) {
+ throw new IllegalArgumentException("์ง์๋์ง ์๋ ์ค๋์ค ํ์ผ ํ์์
๋๋ค.", e);
+ } catch (IOException e) {
+ log.error("Error processing S3 URL: {}", s3Url, e);
+ throw new IllegalArgumentException("์ค๋์ค ์ฒ๋ฆฌ ์คํจ", e);
+ }
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/BgmFileService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/BgmFileService.java
index 0e4d863e..e934390a 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/BgmFileService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/BgmFileService.java
@@ -1,21 +1,59 @@
package com.oreo.finalproject_5re5_be.concat.service;
import com.oreo.finalproject_5re5_be.concat.entity.BgmFile;
+import com.oreo.finalproject_5re5_be.concat.entity.ConcatResult;
import com.oreo.finalproject_5re5_be.concat.repository.BgmFileRepository;
+import com.oreo.finalproject_5re5_be.concat.repository.ConcatResultRepository;
+import java.util.List;
import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
-import java.util.List;
-
+@Log4j2
@Service
@RequiredArgsConstructor
public class BgmFileService {
private final BgmFileRepository bgmFileRepository;
-
+ private final ConcatResultRepository concatResultRepository;
public List getBgmFilesByTabSeq(Long tabSeq) {
return bgmFileRepository.findByConcatTabSeq(tabSeq);
+ }
+
+ public BgmFile getBgmFileByUrl(String bgmFileUrl) {
+ return bgmFileRepository
+ .findByAudioUrl(bgmFileUrl)
+ .orElseThrow(
+ () -> new IllegalArgumentException("BGM File not found with URL: " + bgmFileUrl));
+ }
+
+ public BgmFile saveBgmFile(BgmFile bgmFile) {
+ return bgmFileRepository.save(bgmFile);
+ }
+
+ public void updateBgmFileWithConcatResult(String bgmFileUrl, Long concatResultSeq) {
+ // ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
+ List bgmFiles = bgmFileRepository.findAllByAudioUrl(bgmFileUrl);
+ if (bgmFiles.isEmpty()) {
+ throw new IllegalArgumentException("BgmFile not found for URL: " + bgmFileUrl);
+ }
+ if (bgmFiles.size() > 1) {
+ log.warn("Multiple BGM files found for URL: {}. Using the first result.", bgmFileUrl);
+ }
+
+ // ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ์ ๋ํด์๋ง ์ฒ๋ฆฌ
+ BgmFile bgmFile = bgmFiles.get(0);
+ ConcatResult concatResult =
+ concatResultRepository
+ .findById(concatResultSeq)
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException(
+ "ConcatResult not found for id: " + concatResultSeq));
+ bgmFile.setConcatResult(concatResult);
+ bgmFileRepository.save(bgmFile);
+ log.info("[updateBgmFileWithConcatResult] Updated BgmFile with ConcatResult: {}", bgmFile);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatResultService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatResultService.java
index 5294bc7c..30575993 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatResultService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatResultService.java
@@ -1,6 +1,5 @@
package com.oreo.finalproject_5re5_be.concat.service;
-
import com.oreo.finalproject_5re5_be.concat.dto.ConcatResultDto;
import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatResultRequest;
import com.oreo.finalproject_5re5_be.concat.dto.response.ConcatResultDetailsResponse;
@@ -9,13 +8,11 @@
import com.oreo.finalproject_5re5_be.concat.entity.ConcatTab;
import com.oreo.finalproject_5re5_be.concat.repository.ConcatResultRepository;
import com.oreo.finalproject_5re5_be.concat.repository.ConcatTabRepository;
+import java.util.List;
+import javax.sound.sampled.AudioInputStream;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
-import javax.sound.sampled.AudioInputStream;
-import java.io.IOException;
-import java.util.List;
-
@RequiredArgsConstructor
@Service
public class ConcatResultService {
@@ -26,41 +23,48 @@ public class ConcatResultService {
// ConcatResult ์ ๋ณด๋ฅผ ๋ฐ์์ ์ ์ฅ (1๊ฐ)
public ConcatUrlResponse saveConcatResult(ConcatResultRequest request) {
// 1. ConcatTab ์กฐํ
- ConcatTab concatTab = concatTabRepository.findById(request.getConcatTabSeq())
- .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " + request.getConcatTabSeq()));
-
- //์กฐํํ ๊ฐ๊ณผ ์
๋ ฅํ ๊ฐ ์ ์ฅ์ ํ๊ธฐ ์ํ ConcatResult ๊ฐ์ฒด ์์ฑ
- ConcatResult concatResult = ConcatResult.builder()
- .concatTab(concatTab) //concatTab ๊ฐ์ฒด ํ์
- .audioUrl(request.getResultUrl())
- .extension(request.getResultExtension())
- .fileLength(request.getResultFileLength())
- .fileName(request.getResultFileName())
- .build();
+ ConcatTab concatTab =
+ concatTabRepository
+ .findById(request.getConcatTabSeq())
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException(
+ "Invalid ConcatTab ID: " + request.getConcatTabSeq()));
+
+ // ์กฐํํ ๊ฐ๊ณผ ์
๋ ฅํ ๊ฐ ์ ์ฅ์ ํ๊ธฐ ์ํ ConcatResult ๊ฐ์ฒด ์์ฑ
+ ConcatResult concatResult =
+ ConcatResult.builder()
+ .concatTab(concatTab) // concatTab ๊ฐ์ฒด ํ์
+ .audioUrl(request.getResultUrl())
+ .extension(request.getResultExtension())
+ .fileLength(request.getResultFileLength())
+ .fileName(request.getResultFileName())
+ .build();
ConcatResult result = concatResultRepository.save(concatResult);
- return ConcatUrlResponse.builder() //response ๊ฐ์ฒด ์์ฑ
- .seq(result.getConcatResultSequence()) //์ ์ฅ๋ ๊ฐ์ฒด์ seq
- .url(result.getAudioUrl()) //์ ์ฅ๋ ๊ฐ์ฒด์ url
+ return ConcatUrlResponse.builder() // response ๊ฐ์ฒด ์์ฑ
+ .seq(result.getConcatResultSequence()) // ์ ์ฅ๋ ๊ฐ์ฒด์ seq
+ .url(result.getAudioUrl()) // ์ ์ฅ๋ ๊ฐ์ฒด์ url
.build();
-
}
// AudioInputStream์์ ConcatResult ์ ์ฅ
public ConcatUrlResponse saveConcatResult(
- Long concatTabSeq, String audioUrl, String fileName, AudioInputStream mixedAudioStream) throws IOException {
+ Long concatTabSeq, String audioUrl, String fileName, AudioInputStream mixedAudioStream) {
// 1. AudioInputStream์ ์ฌ์ฉํ์ฌ ๊ธธ์ด ๊ณ์ฐ
- long fileLength = (long) (mixedAudioStream.getFrameLength() / mixedAudioStream.getFormat().getFrameRate());
+ long fileLength =
+ (long) (mixedAudioStream.getFrameLength() / mixedAudioStream.getFormat().getFrameRate());
// 2. ConcatResultRequest ์์ฑ
- ConcatResultRequest request = ConcatResultRequest.builder()
- .concatTabSeq(concatTabSeq)
- .ResultUrl(audioUrl)
- .ResultFileName(fileName + ".wav")
- .ResultExtension("wav")
- .ResultFileLength((float) fileLength)
- .build();
+ ConcatResultRequest request =
+ ConcatResultRequest.builder()
+ .concatTabSeq(concatTabSeq)
+ .ResultUrl(audioUrl)
+ .ResultFileName(fileName + ".wav")
+ .ResultExtension("wav")
+ .ResultFileLength((float) fileLength)
+ .build();
// 3. ๊ธฐ์กด ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ ์ฅ
return saveConcatResult(request);
@@ -70,14 +74,18 @@ public ConcatResult saveConcatResult(ConcatResult request) {
return concatResultRepository.save(request);
}
-
// ConcatResult Seq๋ฅผ ๋ฐ์์ ConcatResult์ ์ธ๋ถ ์ ๋ณด ์กฐํ (1๊ฐ)
public ConcatResultDetailsResponse getConcatResultDetails(Long concatResultSeq) {
// ConcatResult ์กฐํ
- ConcatResult concatResult = concatResultRepository.findByConcatResultSequence(concatResultSeq)
- .orElseThrow(() -> new IllegalArgumentException("ConcatResult not found with seq: " + concatResultSeq));
-
- //Response์ ์ ๋ณด ๋ด๊ธฐ
+ ConcatResult concatResult =
+ concatResultRepository
+ .findByConcatResultSequence(concatResultSeq)
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException(
+ "ConcatResult not found with seq: " + concatResultSeq));
+
+ // Response์ ์ ๋ณด ๋ด๊ธฐ
return ConcatResultDetailsResponse.builder()
.concatTabSeq(concatResult.getConcatTab().getProjectId())
.audioUrl(concatResult.getAudioUrl())
@@ -85,29 +93,38 @@ public ConcatResultDetailsResponse getConcatResultDetails(Long concatResultSeq)
.fileLength(concatResult.getFileLength())
.fileName(concatResult.getFileName())
.build();
-
}
// ConcatResult Seq๋ฅผ ๋ฐ์์ ํด๋น ConcatResult๋ฅผ ์ญ์ (1๊ฐ)
public void deleteConcatResultBySeq(Long concatResultSeq) {
// ConcatResult ์กด์ฌ ์ฌ๋ถ ํ์ธ
- ConcatResult concatResult = concatResultRepository.findById(concatResultSeq)
- .orElseThrow(() -> new IllegalArgumentException("ConcatResult not found with seq: " + concatResultSeq));
+ ConcatResult concatResult =
+ concatResultRepository
+ .findById(concatResultSeq)
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException(
+ "ConcatResult not found with seq: " + concatResultSeq));
// ์ญ์
concatResultRepository.delete(concatResult);
-
}
public List findByConcatTabSequence(Long projectSeq) {
List byProjectSeq = concatResultRepository.findByConcatTabSequence(projectSeq);
- return byProjectSeq.stream().map(cr -> ConcatResultDto.builder()
- .concatResultSequence(cr.getConcatResultSequence())
- .fileName(cr.getFileName())
- .extension(cr.getExtension())
- .fileSize(cr.getFileSize())
- .audioUrl(cr.getAudioUrl())
- .fileLength(cr.getFileLength())
- .build()).toList();
+ return byProjectSeq.stream()
+ .map(
+ cr ->
+ ConcatResultDto.builder()
+ .concatResultSequence(cr.getConcatResultSequence())
+ .fileName(cr.getFileName())
+ .extension(cr.getExtension())
+ .fileSize(cr.getFileSize())
+ .audioUrl(cr.getAudioUrl())
+ .fileLength(cr.getFileLength())
+ .seperated(cr.getSeperated())
+ .processId(cr.getProcessId())
+ .build())
+ .toList();
}
}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowService.java
index b9330d83..59387423 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowService.java
@@ -10,11 +10,10 @@
import com.oreo.finalproject_5re5_be.concat.repository.ConcatTabRepository;
import com.oreo.finalproject_5re5_be.concat.service.helper.ConcatRowHelper;
import jakarta.transaction.Transactional;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
import java.util.*;
import java.util.stream.Stream;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
@@ -24,61 +23,64 @@ public class ConcatRowService {
private final ConcatRowHelper concatRowHelper;
private final AudioFileService audioFileService;
- //ํ์ฌ Hibernate์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ์ธ์ ์ํด ์๋์ผ๋ก project, concat_tab, concat_option์ ํ์ธ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํจ
+ // ํ์ฌ Hibernate์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ์ธ์ ์ํด ์๋์ผ๋ก project, concat_tab, concat_option์ ํ์ธ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํจ
public List readRecentConcatRows(long projectSequence) {
- List concatRows = concatRowRepository
- .findByStatusAndConcatTab_Project_ProSeq('Y', projectSequence);
+ List concatRows =
+ concatRowRepository.findByStatusAndConcatTab_Project_ProSeq('Y', projectSequence);
if (concatRows.isEmpty()) {
return new ArrayList<>();
}
- return concatRows.stream().map(cr -> ConcatRowDto.builder()
- .concatRowSequence(cr.getConcatRowSeq())
- .projectSequence(projectSequence)
- .rowText(cr.getRowText())
- .rowIndex(cr.getRowIndex())
- .selected(cr.getSelected())
- .status(cr.getStatus())
- .silence(cr.getSilence())
- .build()
- ).toList();
+ return concatRows.stream()
+ .map(
+ cr ->
+ ConcatRowDto.builder()
+ .concatRowSequence(cr.getConcatRowSeq())
+ .projectSequence(projectSequence)
+ .rowText(cr.getRowText())
+ .rowIndex(cr.getRowIndex())
+ .selected(cr.getSelected())
+ .status(cr.getStatus())
+ .silence(cr.getSilence())
+ .build())
+ .toList();
}
public List readConcatRows(long concatRowSequence) {
- List concatRows = concatRowRepository
- .findByConcatRowSeq(concatRowSequence);
- return concatRows.stream().map(cr -> ConcatRowDto.builder()
- .concatRowSequence(cr.getConcatRowSeq())
- .rowText(cr.getRowText())
- .rowIndex(cr.getRowIndex())
- .selected(cr.getSelected())
- .silence(cr.getSilence())
- .build()
- ).toList();
+ List concatRows = concatRowRepository.findByConcatRowSeq(concatRowSequence);
+ return concatRows.stream()
+ .map(
+ cr ->
+ ConcatRowDto.builder()
+ .concatRowSequence(cr.getConcatRowSeq())
+ .rowText(cr.getRowText())
+ .rowIndex(cr.getRowIndex())
+ .selected(cr.getSelected())
+ .silence(cr.getSilence())
+ .build())
+ .toList();
}
@Transactional
public boolean disableConcatRows(List rowSeq) {
- return concatRowRepository.updateStatusByConcatRowSeq(rowSeq, 'N') == rowSeq.size();//ํ ๋นํ์ฑ ์ฒ๋ฆฌ
+ return concatRowRepository.updateStatusByConcatRowSeq(rowSeq, 'N') == rowSeq.size(); // ํ ๋นํ์ฑ ์ฒ๋ฆฌ
}
-
- @Transactional(rollbackOn = Exception.class)//๋ชจ๋ ์์ธ์ ๋ํด ๋กค๋ฐฑ ์ํ
+ @Transactional(rollbackOn = Exception.class) // ๋ชจ๋ ์์ธ์ ๋ํด ๋กค๋ฐฑ ์ํ
public boolean updateConcatRows(ConcatRowSaveRequestDto requestDto) {
Optional concatTabOpt = concatTabRepository.findById(requestDto.getConcatTabId());
if (concatTabOpt.isPresent()) {
- return disableConcatRowsForUpdate(requestDto.getConcatRowRequests()) &&
- saveConcatRows(requestDto);
+ return disableConcatRowsForUpdate(requestDto.getConcatRowRequests())
+ && saveConcatRows(requestDto);
}
return false;
}
private boolean disableConcatRowsForUpdate(List concatRows) {
- List concatRowSeq = concatRows
- .stream().map(ConcatRowRequest::getSeq)
- .filter(Objects::nonNull).toList();
- //ํ ๋นํ์ฑ ์ฒ๋ฆฌ
+ List concatRowSeq =
+ concatRows.stream().map(ConcatRowRequest::getSeq).filter(Objects::nonNull).toList();
+ // ํ ๋นํ์ฑ ์ฒ๋ฆฌ
return concatRowRepository.updateStatusByConcatRowSeq(concatRowSeq, 'N') == concatRowSeq.size();
}
@@ -86,58 +88,70 @@ public ConcatRow readConcatRow(Long concatRowSeq) {
return concatRowRepository.findById(concatRowSeq).orElse(null);
}
-
@Transactional
public boolean saveConcatRows(ConcatRowSaveRequestDto requestDto) {
// 1. ConcatTab ํ์ธ ๋ฐ ์กฐํ
- ConcatTab concatTab = concatTabRepository.findById(requestDto.getConcatTabId())
- .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " + requestDto.getConcatTabId()));
+ ConcatTab concatTab =
+ concatTabRepository
+ .findById(requestDto.getConcatTabId())
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException(
+ "Invalid ConcatTab ID: " + requestDto.getConcatTabId()));
List audioFiles = new ArrayList<>();
// 2. ConcatRowRequest ์ฒ๋ฆฌ
- List saveRows = getConcatRows(requestDto.getConcatRowRequests(), concatTab, audioFiles);
+ List saveRows =
+ getConcatRows(requestDto.getConcatRowRequests(), concatTab, audioFiles);
// 3. ConcatRow, ์ ์ฅ
-// concatRowHelper.batchInsert(saveRows);
+ // concatRowHelper.batchInsert(saveRows);
audioFileService.saveAudioFiles(audioFiles);
return true;
}
// @Transactional
-// public boolean saveConcatRows(ConcatRowRequestDto requestDto) {
-// // 1. ConcatTab ํ์ธ ๋ฐ ์กฐํ
-// ConcatTab concatTab = concatTabRepository.findById(requestDto.getConcatTabId())
-// .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " + requestDto.getConcatTabId()));
-//
-// List audioFiles = new ArrayList<>();
-// // 2. ConcatRowRequest ์ฒ๋ฆฌ
-// List concatRows = getConcatRows(requestDto.getConcatRowRequests(), concatTab, audioFiles);
-//
-// // 3. ConcatRow, ์ ์ฅ
-// concatRowHelper.batchInsert(concatRows);
-// audioFileService.saveAudioFiles(audioFiles);
-// return true;
-// }
- private List getConcatRows(List requestDto, ConcatTab concatTab, List audioFiles) {
+ // public boolean saveConcatRows(ConcatRowRequestDto requestDto) {
+ // // 1. ConcatTab ํ์ธ ๋ฐ ์กฐํ
+ // ConcatTab concatTab = concatTabRepository.findById(requestDto.getConcatTabId())
+ // .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " +
+ // requestDto.getConcatTabId()));
+ //
+ // List audioFiles = new ArrayList<>();
+ // // 2. ConcatRowRequest ์ฒ๋ฆฌ
+ // List concatRows = getConcatRows(requestDto.getConcatRowRequests(), concatTab,
+ // audioFiles);
+ //
+ // // 3. ConcatRow, ์ ์ฅ
+ // concatRowHelper.batchInsert(concatRows);
+ // audioFileService.saveAudioFiles(audioFiles);
+ // return true;
+ // }
+ private List getConcatRows(
+ List requestDto, ConcatTab concatTab, List audioFiles) {
return requestDto.stream()
- .filter(rowRequest -> rowRequest.getStatus() != 'N').map(rowRequest -> {
-
- // 2.2 ConcatRow ์์ฑ
- ConcatRow concatRow = ConcatRow.builder()
- .concatTab(concatTab)
- .rowText(rowRequest.getRowText())
- .selected(rowRequest.getSelected())
- .silence(rowRequest.getRowSilence())
- .rowIndex(rowRequest.getRowIndex())
- .status('Y') // ๊ธฐ๋ณธ ์ํ ์ค์
- .build();
-
- // 2.3 AudioFile ์ ์ฅ ๋ฐ ์ฐ๊ด ์ค์
- AudioFile originAudio = mapToAudioFile(rowRequest.getOriginAudioRequest(), concatRow);
- audioFiles.add(originAudio);
-
- return concatRow;
- }).toList();
+ .filter(rowRequest -> rowRequest.getStatus() != 'N')
+ .map(
+ rowRequest -> {
+
+ // 2.2 ConcatRow ์์ฑ
+ ConcatRow concatRow =
+ ConcatRow.builder()
+ .concatTab(concatTab)
+ .rowText(rowRequest.getRowText())
+ .selected(rowRequest.getSelected())
+ .silence(rowRequest.getRowSilence())
+ .rowIndex(rowRequest.getRowIndex())
+ .status('Y') // ๊ธฐ๋ณธ ์ํ ์ค์
+ .build();
+
+ // 2.3 AudioFile ์ ์ฅ ๋ฐ ์ฐ๊ด ์ค์
+ AudioFile originAudio = mapToAudioFile(rowRequest.getOriginAudioRequest(), concatRow);
+ audioFiles.add(originAudio);
+
+ return concatRow;
+ })
+ .toList();
}
private AudioFile mapToAudioFile(OriginAudioRequest originAudioRequest, ConcatRow concatRow) {
@@ -152,27 +166,52 @@ private AudioFile mapToAudioFile(OriginAudioRequest originAudioRequest, ConcatRo
.build();
}
- public boolean uploadText(List concatRowSaveRequestDto) {
- boolean check = concatRowSaveRequestDto.stream()
- .anyMatch(rowRequest -> rowRequest.getStatus() == 'N' || rowRequest.getSeq() == null);
+ public boolean uploadText(ConcatRowSaveRequestDto concatRowSaveRequestDto) {
+
+ // 1. ์์ฒญ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ
+ boolean check =
+ concatRowSaveRequestDto.getConcatRowRequests().stream()
+ .anyMatch(rowRequest -> rowRequest.getStatus() == 'N' || rowRequest.getSeq() == null);
if (check) {
return false;
}
- List list = concatRowSaveRequestDto.stream().map(cr -> ConcatRow
- .builder()
- .concatRowSeq(cr.getSeq())
- .rowText(cr.getRowText()).build()).toList();
- concatRowHelper.batchInsert(list);
+ // 2. ConcatTab ์กฐํ
+ Long concatTabId = concatRowSaveRequestDto.getConcatTabId();
+ ConcatTab concatTab =
+ concatTabRepository
+ .findById(concatTabId)
+ .orElseThrow(
+ () -> new IllegalArgumentException("Invalid ConcatTab ID: " + concatTabId));
+
+ // 3. ConcatRow ๋ฆฌ์คํธ ์์ฑ
+ List concatRows =
+ concatRowSaveRequestDto.getConcatRowRequests().stream()
+ .map(
+ request ->
+ ConcatRow.builder()
+ .concatRowSeq(request.getSeq())
+ .rowIndex(request.getRowIndex())
+ .selected(request.getSelected())
+ .silence(request.getRowSilence())
+ .status(request.getStatus())
+ .concatTab(concatTab) // ์กฐํํ concatTab ์ค์
+ .rowText(request.getRowText())
+ .build())
+ .toList();
+
+ // 4. ConcatRow ์ ์ฅ
+ concatRowRepository.saveAll(concatRows);
+
return true;
}
@Transactional(rollbackOn = Exception.class)
public boolean updateConcatRows(List rowAudioFiles, Long tabId) {
disableConcatRows(rowAudioFiles.stream().map(RowAudioFileDto::getConcatRow));
-// List audioFiles = getAudioFiles(rowAudioFiles, tabId);
+ // List audioFiles = getAudioFiles(rowAudioFiles, tabId);
List audioFiles = audioFileService.saveAll(getAudioFiles(rowAudioFiles, tabId));
-// audioFileService.saveAudioFiles(audioFiles);
+ // audioFileService.saveAudioFiles(audioFiles);
return true;
}
@@ -184,27 +223,33 @@ public boolean disableConcatRows(Stream concatRows) {
private List getAudioFiles(List concatRowAudios, Long tabId) {
- ConcatTab concatTab = concatTabRepository.findById(tabId)
- .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " + tabId));
-
- return concatRowAudios.stream().map(a -> {
- ConcatRow concatRow = ConcatRow.builder()
- .rowText(a.getConcatRow().getRowText())
- .selected(a.getConcatRow().getSelected())
- .silence(a.getConcatRow().getSilence())
- .rowIndex(a.getConcatRow().getRowIndex())
- .status(a.getConcatRow().getStatus())
- .concatTab(concatTab) // ๊ธฐ์กด ๊ฐ์ฒด ์ฌ์ฉ
- .build();
-
- return AudioFile.builder()
- .audioUrl(a.getAudioUrl())
- .extension(a.getExtension())
- .fileSize(a.getFileSize())
- .fileLength(a.getFileLength())
- .fileName(a.getFileName())
- .concatRow(concatRow)
- .build();
- }).toList();
+ ConcatTab concatTab =
+ concatTabRepository
+ .findById(tabId)
+ .orElseThrow(() -> new IllegalArgumentException("Invalid ConcatTab ID: " + tabId));
+
+ return concatRowAudios.stream()
+ .map(
+ a -> {
+ ConcatRow concatRow =
+ ConcatRow.builder()
+ .rowText(a.getConcatRow().getRowText())
+ .selected(a.getConcatRow().getSelected())
+ .silence(a.getConcatRow().getSilence())
+ .rowIndex(a.getConcatRow().getRowIndex())
+ .status(a.getConcatRow().getStatus())
+ .concatTab(concatTab) // ๊ธฐ์กด ๊ฐ์ฒด ์ฌ์ฉ
+ .build();
+
+ return AudioFile.builder()
+ .audioUrl(a.getAudioUrl())
+ .extension(a.getExtension())
+ .fileSize(a.getFileSize())
+ .fileLength(a.getFileLength())
+ .fileName(a.getFileName())
+ .concatRow(concatRow)
+ .build();
+ })
+ .toList();
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowTabService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowTabService.java
new file mode 100644
index 00000000..ff4aefc3
--- /dev/null
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatRowTabService.java
@@ -0,0 +1,48 @@
+package com.oreo.finalproject_5re5_be.concat.service;
+
+import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatRowSaveRequestDto;
+import com.oreo.finalproject_5re5_be.concat.dto.request.ConcatUpdateRequestDto;
+import com.oreo.finalproject_5re5_be.concat.dto.request.TabRowUpdateRequestDto;
+import com.oreo.finalproject_5re5_be.concat.entity.BgmFile;
+import com.oreo.finalproject_5re5_be.concat.entity.ConcatTab;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+public class ConcatRowTabService {
+
+ private final ConcatTabService concatTabService;
+ private final ConcatRowService concatRowService;
+
+ @Transactional // ํธ๋์ญ์
์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ์ํฐํฐ ๋ณ๊ฒฝ๋ด์ฉ ์ ์ฉ ์๋จ
+ public boolean saveTabAndRows(TabRowUpdateRequestDto dto, Long memberSeq) {
+ // 1. ConcatTab ์
๋ฐ์ดํธ
+ ConcatUpdateRequestDto concatTabs = dto.getConcatTab();
+ // 2. ConcatRow ์
๋ฐ์ดํธ (๋ง๋ง ์
๋ฐ์ดํธ๊ณ ์ฌ์ค ์์ฑ์)
+ ConcatRowSaveRequestDto concatRows = dto.getConcatRows();
+
+ // 3. BgmFile ์ ์ฅ
+ ConcatTab concatTab = concatTabService.getConcatTabBySeq(concatTabs.getTabId()); // ConcatTab ์กฐํ
+
+ List bgmFiles =
+ concatTabs.getBgmFileList().stream()
+ .map(
+ bgmRequest ->
+ BgmFile.builder()
+ .concatTab(concatTab)
+ .audioUrl(bgmRequest.getAudioUrl())
+ .fileName(bgmRequest.getFileName())
+ .fileSize(bgmRequest.getFileSize())
+ .fileLength(bgmRequest.getFileLength())
+ .extension(bgmRequest.getExtension())
+ .build())
+ .toList();
+ concatTab.addBgmFile(bgmFiles);
+
+ return concatTabService.updateConcatTab(concatTabs, memberSeq)
+ && concatRowService.updateConcatRows(concatRows);
+ }
+}
diff --git a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatService.java b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatService.java
index 52d01927..2760d155 100644
--- a/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatService.java
+++ b/src/main/java/com/oreo/finalproject_5re5_be/concat/service/ConcatService.java
@@ -15,28 +15,29 @@
import com.oreo.finalproject_5re5_be.global.component.audio.AudioExtensionConverter;
import com.oreo.finalproject_5re5_be.global.component.audio.AudioFormats;
import com.oreo.finalproject_5re5_be.global.component.audio.AudioResample;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.List;
+import javax.sound.sampled.AudioInputStream;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
-import javax.sound.sampled.AudioInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.List;
-
@Slf4j
@Service
@AllArgsConstructor
public class ConcatService {
- private final IntervalConcatenator concatenator
- = new StereoIntervalConcatenator(AudioFormats.STEREO_FORMAT_SR441_B16);
- private final AudioResample audioResample = new AudioResample(AudioFormats.STEREO_FORMAT_SR441_B16);
+ private final IntervalConcatenator concatenator =
+ new StereoIntervalConcatenator(AudioFormats.STEREO_FORMAT_SR441_B16);
+ private final AudioResample audioResample =
+ new AudioResample(AudioFormats.STEREO_FORMAT_SR441_B16);
private final S3Service s3Service;
private final MaterialAudioService materialAudioService;
private final ConcatResultService concatResultService;
- public ConcatResultDto concat(ConcatTabResponseDto concatTabResponseDto, ConcatRowRequestDto concatRowRequests)
+ public ConcatResultDto concat(
+ ConcatTabResponseDto concatTabResponseDto, ConcatRowRequestDto concatRowRequests)
throws IOException {
Result concatResult = getResult(concatTabResponseDto, concatRowRequests);
@@ -44,8 +45,9 @@ public ConcatResultDto concat(ConcatTabResponseDto concatTabResponseDto, ConcatR
throw new IllegalArgumentException("ํ์ฉ๋์ง ์์ ์ ๊ทผ์
๋๋ค.");
}
- //์ฌ๋ฃ ์ค๋์ค ์ ์ฅ
- materialAudioService.saveMaterialAudio(prepareMaterialAudio(concatResult.audios(), concatResult.result()));
+ // ์ฌ๋ฃ ์ค๋์ค ์ ์ฅ
+ materialAudioService.saveMaterialAudio(
+ prepareMaterialAudio(concatResult.audios(), concatResult.result()));
return ConcatResultDto.builder()
.concatResultSequence(concatResult.result().getConcatResultSequence())
.extension(concatResult.result().getExtension())
@@ -54,11 +56,11 @@ public ConcatResultDto concat(ConcatTabResponseDto concatTabResponseDto, ConcatR
.fileSize(concatResult.result().getFileSize())
.fileLength(concatResult.result().getFileLength())
.build();
-
}
- //์ฑ
์ : s3 ์ ์ฅ, ๊ฒฐ๊ณผ ์ ์ฅ
- private Result getResult(ConcatTabResponseDto concatTabResponseDto, ConcatRowRequestDto concatRowRequests)
+ // ์ฑ
์ : s3 ์ ์ฅ, ๊ฒฐ๊ณผ ์ ์ฅ
+ private Result getResult(
+ ConcatTabResponseDto concatTabResponseDto, ConcatRowRequestDto concatRowRequests)
throws IOException {
List audios = concatRowRequests.getConcatRowRequests();
if (checkNull(audios)) {
@@ -69,26 +71,31 @@ private Result getResult(ConcatTabResponseDto concatTabResponseDto, ConcatRowReq
return new Result(audios, result);
}
- private ConcatResult getConcatResult(ConcatTabResponseDto concatTabResponseDto, ConcatRowRequestDto concatRowRequests, List audios) throws IOException {
+ private ConcatResult getConcatResult(
+ ConcatTabResponseDto concatTabResponseDto,
+ ConcatRowRequestDto concatRowRequests,
+ List audios)
+ throws IOException {
AudioInputStream concat = resampleAudio(concatTabResponseDto, audios);
byte[] audioData = AudioExtensionConverter.mp3ToWav(concat); // AudioInputStream์ byte[]๋ก ๋ณํ
- MultipartFile multipartFile
- = new AudioMultipartFile(audioData, concatRowRequests.getFileName(), "audio/wav");
+ MultipartFile multipartFile =
+ new AudioMultipartFile(audioData, concatRowRequests.getFileName(), "audio/wav");
String uploadUrl = getUploadtoS3(multipartFile);
log.info("[Uploaded file URL : {}] ", uploadUrl);
- //๊ฒฐ๊ณผ ์ ์ฅ
- ConcatResult result = ConcatResult.builder().concatTab(ConcatTab.builder()
- .projectId(concatTabResponseDto.getTabId()).build())
- .audioUrl(uploadUrl)
- .extension("WAV")
- .fileSize((long) audioData.length)
- .fileLength(concat.getFrameLength() / concat.getFormat().getFrameRate())
- .fileName(concatRowRequests.getFileName())
- .build();
+ // ๊ฒฐ๊ณผ ์ ์ฅ
+ ConcatResult result =
+ ConcatResult.builder()
+ .concatTab(ConcatTab.builder().projectId(concatTabResponseDto.getTabId()).build())
+ .audioUrl(uploadUrl)
+ .extension("WAV")
+ .fileSize((long) audioData.length)
+ .fileLength(concat.getFrameLength() / concat.getFormat().getFrameRate())
+ .fileName(concatRowRequests.getFileName())
+ .build();
return concatResultService.saveConcatResult(result);
}
@@ -107,57 +114,48 @@ private String getUploadtoS3(MultipartFile multipartFile) throws IOException {
"concat/result",
multipartFile.getOriginalFilename(),
multipartFile.getSize(),
- multipartFile.getContentType()
- );
+ multipartFile.getContentType());
}
- private AudioInputStream resampleAudio(ConcatTabResponseDto concatTabResponseDto, List audios) throws IOException {
- List audioProperties = audios.stream().map(cr -> new AudioProperties(
- resample(S3Service.load(cr.getOriginAudioRequest().getAudioUrl()))
- , cr.getRowSilence()
- )).toList();//์ค๋์ค ๋ฐ์์ค๊ธฐ
-
- ByteArrayOutputStream concatResult = concatenator
- .intervalConcatenate(audioProperties, concatTabResponseDto.getFrontSilence());//๊ฒฐ๊ณผ ์์ฑ
-
- //๋ฆฌ์ํ
+ private AudioInputStream resampleAudio(
+ ConcatTabResponseDto concatTabResponseDto, List audios) throws IOException {
+ List audioProperties =
+ audios.stream()
+ .map(
+ cr ->
+ new AudioProperties(
+ resample(S3Service.load(cr.getOriginAudioRequest().getAudioUrl())),
+ cr.getRowSilence()))
+ .toList(); // ์ค๋์ค ๋ฐ์์ค๊ธฐ
+
+ ByteArrayOutputStream concatResult =
+ concatenator.intervalConcatenate(
+ audioProperties, concatTabResponseDto.getFrontSilence()); // ๊ฒฐ๊ณผ ์์ฑ
+
+ // ๋ฆฌ์ํ
return audioResample.resample(concatResult);
}
- public List prepareMaterialAudio(List audios, ConcatResult concatResult) {
-
- return audios.stream().map(aud -> MaterialAudio.builder()
- .concatResult(concatResult)
- .method("Normal")
- .audioFile(AudioFile.builder().audioFileSeq(aud.getSeq()).build())
- .build()).toList();
-
+ public List prepareMaterialAudio(
+ List