Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
945a0fa
#1 [Docs] 홈/마이페이지 API 명세 및 ERD 문서 정리 (#2)
Dante0922 Mar 8, 2026
95f60dc
#3 [Docs] Oauth2 ERD 및 API 정의 (#4)
si-zero Mar 10, 2026
062f9fc
[Docs] 배틀, 시나리오, 투표, 태그 ERD 및 API 정의
jucheonsu Mar 11, 2026
6e83da8
#8 [Docs] user/oauth ERD 및 API 명세 정리 (#9)
Dante0922 Mar 11, 2026
deb598f
#7 [Chore] API 공통 응답 구조 및 기본 Config 세팅 (#11)
jucheonsu Mar 12, 2026
301f313
#10 [Docs] Perspective , Like , Comment ERD 및 API 정의 (#12)
HYH0804 Mar 12, 2026
b5efc6e
#13 [Docs] user/oauth API 응답 수정
si-zero Mar 13, 2026
ff0cdb7
#19 [Fix] 공통 응답 API 수정
si-zero Mar 13, 2026
f4da179
#21 [Feat] 사용자 도메인 및 API 구현 (#24)
Dante0922 Mar 14, 2026
8d57f66
#17 [Feat] Perspective 도메인 기능 개발 (#26)
HYH0804 Mar 15, 2026
e212667
#15 [Feat] 배틀, 태그, 투표 도메인 기능 개발 (#28)
jucheonsu Mar 16, 2026
6d63f2f
#18 [Feat] OAuth2.0 연동 및 구현
si-zero Mar 16, 2026
9d5cfe8
#25 [Feat] 관점 생성, 수정 시 GPT 검수 (#31)
HYH0804 Mar 18, 2026
3525090
#29 [Feat] 시나리오 도메인 기능 구현 (#32)
jucheonsu Mar 18, 2026
b37b1b0
#33 [Feat] 관리자 도메인 구축 및 다중 TTS 파이프라인 연동 (#35)
jucheonsu Mar 19, 2026
83d48df
#34 [CI/CD] 인라인 구축 및 자동 배포 설정 (#41)
si-zero Mar 22, 2026
688a528
#37 [Feat] 홈 API 및 공지 조회 기능 구현 (#38)
Dante0922 Mar 22, 2026
51abc56
#44 [Hotfix] 자동 배포 오류 수정 (#45)
si-zero Mar 22, 2026
cca46ae
#42 [Refactor] 전역 식별자 타입 변경 (UUID → Long) 및 BaseEntity 적용 (#47)
jucheonsu Mar 23, 2026
0b32654
#48 [Feat] 전역 API 로깅 및 JwtFilter 예외 응답 로직 구현
si-zero Mar 24, 2026
53a38b8
#46 [Feat] Fish Audio TTS 파이프라인 구축 및 S3 업로드 연동 (#50)
jucheonsu Mar 24, 2026
384b07b
#52 [Hotfix] 스웨거 연결 오류 수정
si-zero Mar 25, 2026
e51e645
#54 [CI/CD] Github Actions 배포 스크립트 개선 (#55)
si-zero Mar 25, 2026
b1251aa
#57 [CI/CD] Github Actions 수동 실행 추가
si-zero Mar 26, 2026
7c6919e
#55 [Hotfix] 특수문자 이스케이프(Escape) 및 데이터 절단 이슈 수정
si-zero Mar 26, 2026
747035f
#43 [Feat] 배틀 · 퀴즈 · 투표 타입 및 관리자 페이지 구현 (#56)
jucheonsu Mar 26, 2026
c9d8c71
#36 [Feat] user 도메인 리팩토링 및 마이페이지 API 구현 (#39)
Dante0922 Mar 28, 2026
fccaeba
#60 [Feat] AdMob 기능 및 SSV 검증 로직 추가 (#61)
si-zero Mar 28, 2026
b7f9fe7
#64 [Feat] Home/MyPage/Search 탭 개선 (#65)
Dante0922 Mar 28, 2026
005ac76
#51 [Refactor] User 엔티티 연결 및 전 도메인 TODO 해소 (#66)
Dante0922 Mar 28, 2026
a2b753e
#67 알림(Notification) 도메인 신설 및 notice 통합 (#68)
Dante0922 Mar 28, 2026
68453d0
#62 [Feat] 흥미로운 배틀 기능 추가 (#70)
HYH0804 Mar 29, 2026
3e2485c
[Hotfix] Home API NPE 수정 및 철학자 이미지 presigned URL 연동
Dante0922 Mar 29, 2026
0fc3f54
[Hotfix] HomeService stream NPE 수정 (#74)
Dante0922 Mar 29, 2026
0cfd73d
#63 [CI/CD] Nginx Reverse Proxy 및 Certbot 기반의 SSL 인증 (#71)
si-zero Mar 29, 2026
e551577
#75 [Hotfix] 브라우저 자체 차단 이슈 수정
si-zero Mar 29, 2026
8fa6b6e
#69 [Feat] S3 보안 처리 및 TTS 재사용 전략 도입, 관리자 폼 개편 및 N+1 개선 (#77)
jucheonsu Mar 29, 2026
29d6cc5
#22 [Rename] PICKE 패키지명 및 앱명 변경
jucheonsu Mar 30, 2026
db689fd
#79 [Chore] Admob API 접근을 위한 보안 예외 처리 및 환경 변수 처리
si-zero Mar 30, 2026
1d9dc15
#79 [Feat] 화이트리스트 추가
si-zero Mar 30, 2026
43214e3
#79 [Fix] 엔드포인트 오타 수정
si-zero Mar 30, 2026
11c4f99
#84 [Feat] UserBattle 도메인 구현 및 TTS 청취 기반 배틀 진행 단계 추적 시스템 도입 (#85)
jucheonsu Mar 30, 2026
f9f646d
#86 [Fix] characterType null 체크 추가 - 미설정 유저 NPE 수정 (#88)
HYH0804 Mar 30, 2026
e0efed2
#83 [Feat] Admob 크레딧 지급 로직 추가
si-zero Mar 30, 2026
3be7bdd
#90 [Comment] 서명 검증 로직 주석 처리
si-zero Mar 30, 2026
8d3b583
#87 [Feat] S3 Presigned URL 리소스 서빙 엔드포인트 도입 및 URL 변환 책임 이전 (#93)
jucheonsu Mar 30, 2026
b1fdc53
#94 [Feat] 관리자 투표 삭제 기능 구현 및 오디오 URL 시나리오 ID 변경 (#95)
jucheonsu Mar 30, 2026
8640a2b
#90 [Comment] Admob 등록 완료로 인한 주석 처리 취소
si-zero Mar 30, 2026
f8f9ee2
#96 [Feat] 시나리오 응답에 배틀 title 추가 및 화자명 자동 매핑 로직 개선 (#97)
jucheonsu Mar 31, 2026
f4b59b2
#98 [Refactor] AdMob 요청 DTO 변경 및 개선
si-zero Mar 31, 2026
abf8e38
#101 [Feat] 배틀 API 고도화, 성능 최적화, 홈 이미지 오류 해결 (#102)
jucheonsu Mar 31, 2026
c614e7f
#100 [Refactor] AdMob 유저ID 변환 코드 리팩토링
si-zero Mar 31, 2026
45c2696
#104 [Feat] 알림 상세·읽음 추적, 회원 탈퇴 사유 저장, 프로필/리캡 응답 개선 (#105)
Dante0922 Apr 1, 2026
1fb2f6b
#106 [Feat] 퀴즈 정답 여부, 토론 기록 고도화, 투표 로직 수정, 오디오 길이 오류 수정 (#107)
jucheonsu Apr 2, 2026
1f24cfc
#108 [Feat] 배틀 카테고리 5개 호출, 사전 투표 여러 번
si-zero Apr 2, 2026
b7da8ce
#111 [Hotfix] 중복 메소드 선언 제거
si-zero Apr 2, 2026
e713cf1
#110 [FIX] 흥미로운 배틀 추천 API 스웨거 에러 (#113)
HYH0804 Apr 2, 2026
d679d2f
[Fix] 관점 삭제 시 FK 제약 조건 위반 오류 수정 (#115)
HYH0804 Apr 2, 2026
5003613
#116 [Feat] 퀴즈 및 투표 API 구현, 배틀 리스트 타입 필터링 적용 및 성능 최적화 (#117)
jucheonsu Apr 2, 2026
3a1efc0
[FIX] 흥미로운 배틀 API Type 필터링 변경 (#119)
HYH0804 Apr 3, 2026
a6b7a0c
#120 [Feat] 홈 API 비회원 접근 지원 및 알림 읽음 여부 개선 (#121)
jucheonsu Apr 3, 2026
57ee6f9
#122 [Hotfix] 구글 소셜 로그인 오류 수정
si-zero Apr 3, 2026
4943712
#124 [Fix] 카카오 디코딩 문제 수정
si-zero Apr 3, 2026
522c6d1
[Feat] 콘텐츠 활동 내역 API 캐릭터 이미지 URL 추가 (#126)
Dante0922 Apr 3, 2026
4e4d474
[Fix] 검색 API BattleType.BATTLE 필터링 추가 (#127)
Dante0922 Apr 3, 2026
82eb968
#128 [Feat] 철학자 유형 계산 옵션 기반 개선, 투표 totalCount 추가, 홈 title/summary 수정 …
jucheonsu Apr 3, 2026
0e8e477
#130 [Feat] 퀴즈/투표 voteCount 캐싱 및 관리자 삭제 API 분리 (#131)
jucheonsu Apr 3, 2026
20cabb2
#114 [Refactor] 댓글 조회 API 설계 수정 (#132)
HYH0804 Apr 3, 2026
1fc5ef7
#133 [Refactor] 관리자 투표 삭제 배틀 단위로 변경 및 퀴즈/투표 타입 검증 추가 (#134)
jucheonsu Apr 3, 2026
7d305a8
#135 [Feat] 회원탈퇴 시 소셜 로그인 기록 삭제
si-zero Apr 4, 2026
8692261
#145 [Feat] 딥링크 공유 API 구현 (리포트/배틀) (#146)
HYH0804 Apr 9, 2026
35cff39
#145 [Feat] 딥링크 공유 API 구현 (리포트/배틀) (#147)
HYH0804 Apr 9, 2026
7d810a8
#139 [CI/CD] 배포 / 개발 서버 분리 작업
si-zero Apr 10, 2026
33b669c
#149 [Chore] 8081 개발 서버 SSL 인증서 및 .env 파일 설정
si-zero Apr 10, 2026
705e53a
#159 [CI/CD] 서버 메모리 제한
si-zero Apr 11, 2026
f8c734b
#137 [Hotfix] QuizVoteResponse.OptionStat stance 필드 누락 긴급 수정 (#138)
jucheonsu Apr 11, 2026
25d3d2d
#161 [Chore] 개발 서버 주소에 맞춘 환경설정
si-zero Apr 11, 2026
c1813e9
#140 [Breaking Change] Battle/Quiz/Poll 분리 및 Vote 도메인 재편 (#154)
jucheonsu Apr 11, 2026
05b68f2
Revert "#140 [Breaking Change] Battle/Quiz/Poll 분리 및 Vote 도메인 재편" (#163)
jucheonsu Apr 11, 2026
afd2152
#140 [Breaking Change] Battle/Quiz/Poll 분리 및 Vote 도메인 재편 (#164)
jucheonsu Apr 11, 2026
e522658
#151 [Breaking Change] Admin 도메인 이관 및 관리자 UI 동기화 (#155)
jucheonsu Apr 11, 2026
53582bc
#152 [Fix] 시나리오 발행 파이프라인 및 TTS/S3 처리 개선 (#156)
jucheonsu Apr 11, 2026
cd943f9
#165 [Hotfix] AdminScenarioService 컴파일 에러 긴급 수정 (#166)
jucheonsu Apr 11, 2026
395fbc0
#157 [Chore] 마이그레이션 3종 + 문서 + 테스트 동기화 (#158)
jucheonsu Apr 11, 2026
8d2ba71
#143 [Feat] 마이페이지 리캡 공유 API 추가 (#167)
Dante0922 Apr 12, 2026
e1a8846
#168 [Feat] 투표 SSE 및 댓글 포인트 (#171)
HYH0804 Apr 14, 2026
63e9116
#144 [Feat] 크레딧 적립/소비 로직 고도화 (#170)
Dante0922 Apr 14, 2026
96c7021
#169 [Feat] 배틀 제안 기능 추가
si-zero Apr 15, 2026
dca52cb
#173 [Fix] 채택 시 지급 포인트 변경
si-zero Apr 15, 2026
aeba83b
#178 [Feat] iOS 딥링크 apple-app-site-association 파일 추가 (#179)
HYH0804 Apr 15, 2026
fad08ca
#176 [Merge] v2.0.0 dev -> main 브랜치 병합 (#182)
jucheonsu Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Java CI/CD with Gradle (Dev Server)

on:
push:
branches: [ "dev" ]
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'

- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew build -x test

# // 1. JAR 파일만 전송 준비 (환경변수는 서버에서 직접 생성하는게 더 깔끔해)
- name: Prepare deployment files
run: |
mkdir -p deploy
cp build/libs/*-SNAPSHOT.jar deploy/

# // 2. JAR 파일 EC2로 전송
- name: Copy files to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
source: "deploy/*"
target: "~/dev-server"
strip_components: 1

# // 3. EC2 서버에서 실행 스크립트
- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
# 1. 기존 8081 프로세스 종료
fuser -k 8081/tcp || true

cd ~/dev-server

# 2. .env 파일 생성
cat <<'EOF' > .env
${{ secrets.ENV_VARIABLES }}
EOF

# 3. 환경 변수 로드 및 메모리 제한 걸어서 실행
# // 1. set -a로 .env 로드, -Xmx256m으로 메모리 방어
set -a; source .env; set +a
nohup java -Xmx256m -Dserver.port=8081 -jar *-SNAPSHOT.jar > dev-app.log 2>&1 &
66 changes: 66 additions & 0 deletions .github/workflows/deploy-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Java CI/CD with Gradle (Main Server)

on:
push:
branches: [ "main" ]
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'

- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew build -x test

# // 1. 전송용 폴더에 JAR 파일만 준비 (환경변수는 보안상 서버에서 직접 생성)
- name: Prepare deployment files
run: |
mkdir -p deploy
cp build/libs/*-SNAPSHOT.jar deploy/

# // 2. 메인 서버 폴더로 JAR 전송
- name: Copy files to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
source: "deploy/*"
target: "~/main-server"
strip_components: 1

# // 3. 운영 서버 실행 스크립트
- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
# 1. 기존 8080 프로세스 종료
fuser -k 8080/tcp || true

# 2. 운영 서버 폴더 이동
cd ~/main-server

# 3. .env 파일 생성 (운영 전용 Secrets 사용)
# // 1. EOF를 써서 특수문자 깨짐 없이 안전하게 저장
cat <<'EOF' > .env
${{ secrets.ENV_VARIABLES }}
EOF

# 4. 환경 변수 로드 및 운영 서버 실행
# // 2. 운영은 400MB 제한으로 안정성 확보
set -a; source .env; set +a
nohup java -Xmx400m -Dserver.port=8080 -jar *-SNAPSHOT.jar > server.log 2>&1 &
53 changes: 53 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Java CI/CD with Gradle

on:
push:
branches: [ "dev" ] # dev 브랜치에 푸시할 때 작동
workflow_dispatch: #

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle' # 캐싱 추가: 빌드 속도가 훨씬 빨라집니다.

- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew build -x test

- name: Create .env file from Secret
run: |
cat <<'EOF' > .env
${{ secrets.ENV_VARIABLES }}
EOF

- name: Copy JAR and .env to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
# -plain.jar는 배포에 필요 없으므로 제외합니다.
source: "build/libs/*-SNAPSHOT.jar, .env"
target: "~/"
strip_components: 2

- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
fuser -k 8080/tcp || true

chmod +x ~/start.sh
~/start.sh
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,7 @@ out/
.vscode/

### Setting ###
.env
.env
postgres_data/
src/main/resources/application-local.yml
.claude
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ git push origin {생성한-브랜치-명}
## 📂 Project Structure

```
com.swyp.app
com.swyp.picke
├── AppApplication.java
├── domain
Expand Down
83 changes: 57 additions & 26 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,52 +1,83 @@
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.3'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'org.springframework.boot' version '3.5.11'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.swyp'
group = 'com.swyp.picke'
version = '0.0.1-SNAPSHOT'
description = 'SWYP APP 4th'
description = 'PICKE - SWYP APP 4th'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenCentral()
google()
}

dependencies {
// Web
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'

// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// Security
implementation 'org.springframework.boot:spring-boot-starter-security'
// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1'
// Lombok

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

// HTTP Client (소셜 API 호출용)
implementation 'org.springframework.boot:spring-boot-starter-webflux'

// AdMob SSV 검증을 위한 Tink 라이브러리
implementation 'com.google.crypto.tink:apps-rewardedads:1.9.1'
testImplementation 'com.google.crypto.tink:apps-rewardedads:1.9.1'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.16'

// Google Cloud TTS
implementation 'com.google.cloud:google-cloud-texttospeech:2.58.0'

// AWS S3
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3:3.3.0'

// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

// devTools
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// PostgreSQL
developmentOnly 'org.springframework.boot:spring-boot-devtools'

// DB
runtimeOnly 'org.postgresql:postgresql'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-security-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
runtimeOnly 'com.h2database:h2'

// Thymeleaf
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

// Test
testRuntimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test' // JPA, Web 테스트 기능 모두 포함
testImplementation 'org.springframework.security:spring-security-test' // 시큐리티 전용 테스트
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
useJUnitPlatform()
}
21 changes: 21 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: '3.8'

services:
db:
image: postgres:15
container_name: pique-postgres-db
restart: always
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- "${DB_PORT}:5432"
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- pique-network

networks:
pique-network:
driver: bridge
52 changes: 52 additions & 0 deletions docs/api-specs/api-path-changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# API 경로 변경/추가 요약 (프론트 전달용)

아래는 **사용자용 API 기준**으로, 기존 대비 바뀐 경로와 새로 분리/추가된 경로를 정리한 문서입니다.
관리자(`admin`) 경로는 제외했습니다.

## 1. 변경된 경로 (기존 → 현재)

### 1.1 콘텐츠 조회

| 기존(통합 Battle 타입 분기) | 현재(도메인 분리) |
|---|---|
| `GET /api/v1/battles?type=QUIZ` | `GET /api/v1/quizzes` |
| `GET /api/v1/battles/{battleId}` (QUIZ 상세) | `GET /api/v1/quizzes/{quizId}` |
| `GET /api/v1/battles?type=POLL` | `GET /api/v1/polls` |
| `GET /api/v1/battles/{battleId}` (POLL 상세) | `GET /api/v1/polls/{pollId}` |

### 1.2 투표 제출/조회

| 기존(통합 투표 처리) | 현재(도메인별 투표) |
|---|---|
| `POST /api/v1/battles/{battleId}/votes/...` (퀴즈 선택 제출에 재사용) | `POST /api/v1/battles/{battleId}/quiz-vote` |
| `GET /api/v1/battles/{battleId}/votes/me` (퀴즈 결과 확인에 재사용) | `GET /api/v1/battles/{battleId}/quiz-vote/me` |
| `POST /api/v1/battles/{battleId}/votes/...` (Poll 선택 제출에 재사용) | `POST /api/v1/battles/{battleId}/poll-vote` |
| `GET /api/v1/battles/{battleId}/votes/me` (Poll 결과 확인에 재사용) | `GET /api/v1/battles/{battleId}/poll-vote/me` |

## 2. 추가된 경로 (프론트에서 새로 호출 필요)

- `GET /api/v1/quizzes`
- `GET /api/v1/quizzes/{quizId}`
- `GET /api/v1/polls`
- `GET /api/v1/polls/{pollId}`
- `POST /api/v1/battles/{battleId}/quiz-vote`
- `GET /api/v1/battles/{battleId}/quiz-vote/me`
- `POST /api/v1/battles/{battleId}/poll-vote`
- `GET /api/v1/battles/{battleId}/poll-vote/me`

## 3. 유지되는 경로 (변경 없음)

- 배틀 전용 투표:
- `POST /api/v1/battles/{battleId}/votes/pre`
- `POST /api/v1/battles/{battleId}/votes/post`
- `GET /api/v1/battles/{battleId}/vote-stats`
- `GET /api/v1/battles/{battleId}/votes/me`

- 배틀 조회:
- `GET /api/v1/battles`
- `GET /api/v1/battles/{battleId}`
- `GET /api/v1/battles/today`

## 4. 참고

- `quiz-vote`, `poll-vote` 경로의 Path Variable 이름은 코드상 `battleId`로 되어 있지만, 내부적으로는 각각 `quizId`, `pollId`로 처리됩니다.
Loading
Loading