fix(music-lab): VIDEO_DATA_DIR 기본값 통일 + lazy import 정리

- VIDEO_DATA_DIR 기본값을 /app/data/videos로 수정 (기존 /app/data에 videos 서브디렉토리를 중복 붙이던 버그 수정)
- delete_project, export_project의 경로에서 중복된 "videos" 서브디렉토리 제거
- create_project 내부의 get_track_by_id lazy import를 파일 상단 import 블록으로 이동
This commit is contained in:
2026-05-01 12:01:59 +09:00
parent 8e7a3806c5
commit 327d0b4e81

View File

@@ -10,7 +10,7 @@ from pydantic import BaseModel
from .db import ( from .db import (
init_db, init_db,
create_task, get_task, create_task, get_task,
get_all_tracks, add_track, delete_track, get_track_file_path, get_track_by_task_id, get_all_tracks, add_track, delete_track, get_track_file_path, get_track_by_task_id, get_track_by_id,
update_track_duration, update_track_file_info, update_track_hash, update_track_duration, update_track_file_info, update_track_hash,
get_all_lyrics, add_lyrics, update_lyrics, delete_lyrics, get_all_lyrics, add_lyrics, update_lyrics, delete_lyrics,
create_video_project, get_video_project, get_all_video_projects, create_video_project, get_video_project, get_all_video_projects,
@@ -39,7 +39,7 @@ app.add_middleware(
) )
MUSIC_DATA_DIR = "/app/data" MUSIC_DATA_DIR = "/app/data"
VIDEO_DATA_DIR = os.getenv("VIDEO_DATA_DIR", "/app/data") VIDEO_DATA_DIR = os.getenv("VIDEO_DATA_DIR", "/app/data/videos")
def _get_mp3_duration(file_path: str) -> Optional[int]: def _get_mp3_duration(file_path: str) -> Optional[int]:
@@ -712,7 +712,6 @@ class RevenueUpdate(BaseModel):
@app.post("/api/music/video-project", status_code=201) @app.post("/api/music/video-project", status_code=201)
def create_project(req: VideoProjectCreate, background_tasks: BackgroundTasks): def create_project(req: VideoProjectCreate, background_tasks: BackgroundTasks):
from .db import get_track_by_id
if not get_track_by_id(req.track_id): if not get_track_by_id(req.track_id):
raise HTTPException(status_code=404, detail="Track not found") raise HTTPException(status_code=404, detail="Track not found")
if req.format not in ("visualizer", "slideshow"): if req.format not in ("visualizer", "slideshow"):
@@ -753,7 +752,7 @@ def export_project(project_id: int):
raise HTTPException(status_code=404, detail="Project not found") raise HTTPException(status_code=404, detail="Project not found")
if proj["status"] != "done": if proj["status"] != "done":
raise HTTPException(status_code=400, detail=f"렌더링 미완료 (status: {proj['status']})") raise HTTPException(status_code=400, detail=f"렌더링 미완료 (status: {proj['status']})")
meta_path = os.path.join(VIDEO_DATA_DIR, "videos", str(project_id), "metadata.json") meta_path = os.path.join(VIDEO_DATA_DIR, str(project_id), "metadata.json")
metadata = {} metadata = {}
if os.path.exists(meta_path): if os.path.exists(meta_path):
with open(meta_path, encoding="utf-8") as f: with open(meta_path, encoding="utf-8") as f:
@@ -774,7 +773,7 @@ def export_project(project_id: int):
def delete_project(project_id: int): def delete_project(project_id: int):
if not get_video_project(project_id): if not get_video_project(project_id):
raise HTTPException(status_code=404, detail="Project not found") raise HTTPException(status_code=404, detail="Project not found")
out_dir = os.path.join(VIDEO_DATA_DIR, "videos", str(project_id)) out_dir = os.path.join(VIDEO_DATA_DIR, str(project_id))
if os.path.isdir(out_dir): if os.path.isdir(out_dir):
shutil.rmtree(out_dir, ignore_errors=True) shutil.rmtree(out_dir, ignore_errors=True)
delete_video_project(project_id) delete_video_project(project_id)