From 1569ead56cd746810427f27cb8adae6cd97f7efa Mon Sep 17 00:00:00 2001 From: hbyang Date: Thu, 26 Feb 2026 14:13:32 +0900 Subject: [PATCH 1/2] =?UTF-8?q?video=5Fid=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Dashboard/CompletionContent.tsx | 9 +++++++-- src/types/api.ts | 1 + src/utils/api.ts | 11 +++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pages/Dashboard/CompletionContent.tsx b/src/pages/Dashboard/CompletionContent.tsx index 73fa7c3..a837980 100755 --- a/src/pages/Dashboard/CompletionContent.tsx +++ b/src/pages/Dashboard/CompletionContent.tsx @@ -45,6 +45,7 @@ const CompletionContent: React.FC = ({ // 소셜 미디어 포스팅 모달 const [showSocialModal, setShowSocialModal] = useState(false); + const [videoDbId, setVideoDbId] = useState(null); // 저장된 완료 데이터 const [songCompletionData, setSongCompletionData] = useState<{ @@ -203,6 +204,10 @@ const CompletionContent: React.FC = ({ if (videoUrlFromResponse) { setVideoUrl(videoUrlFromResponse); + const videoId = statusResponse.render_data?.video_id; + if (videoId) { + setVideoDbId(videoId); + } setVideoStatus('complete'); setStatusMessage(''); saveToStorage(videoTaskId, currentSongTaskId, 'complete', videoUrlFromResponse); @@ -515,8 +520,8 @@ const CompletionContent: React.FC = ({ ; error_message: string | null; diff --git a/src/utils/api.ts b/src/utils/api.ts index 3062b4a..cf85190 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -301,6 +301,17 @@ export async function getVideosList(page: number = 1, pageSize: number = 10): Pr return response.json(); } +// task_id로 video_id 조회 (소셜 업로드용) +export async function getVideoIdByTaskId(taskId: string): Promise { + try { + const response = await getVideosList(1, 50); + const found = response.items.find(v => v.task_id === taskId); + return found?.video_id ?? null; + } catch { + return null; + } +} + // 비디오 삭제 API (개별 비디오 삭제) export async function deleteVideo(videoId: number): Promise { const response = await authenticatedFetch(`${API_URL}/archive/videos/${videoId}`, { From 29e0c7d79c70f727fd2de6bac0f9f3e47cea90cd Mon Sep 17 00:00:00 2001 From: hbyang Date: Thu, 26 Feb 2026 14:19:21 +0900 Subject: [PATCH 2/2] =?UTF-8?q?video=5Fid=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Dashboard/CompletionContent.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pages/Dashboard/CompletionContent.tsx b/src/pages/Dashboard/CompletionContent.tsx index a837980..d1ec1cb 100755 --- a/src/pages/Dashboard/CompletionContent.tsx +++ b/src/pages/Dashboard/CompletionContent.tsx @@ -21,6 +21,7 @@ interface SavedVideoState { songTaskId: string; status: VideoStatus; videoUrl: string | null; + videoDbId?: number; timestamp: number; } @@ -70,12 +71,13 @@ const CompletionContent: React.FC = ({ } }, [renderProgress, onVideoProgressChange]); - const saveToStorage = (videoTaskId: string, currentSongTaskId: string, status: VideoStatus, url: string | null) => { + const saveToStorage = (videoTaskId: string, currentSongTaskId: string, status: VideoStatus, url: string | null, dbId?: number) => { const data: SavedVideoState = { videoTaskId, songTaskId: currentSongTaskId, status, videoUrl: url, + videoDbId: dbId, timestamp: Date.now(), }; localStorage.setItem(VIDEO_STORAGE_KEY, JSON.stringify(data)); @@ -84,6 +86,7 @@ const CompletionContent: React.FC = ({ const completeData = { songTaskId: currentSongTaskId, videoUrl: url, + videoDbId: dbId, completedAt: Date.now(), }; localStorage.setItem(VIDEO_COMPLETE_KEY, JSON.stringify(completeData)); @@ -94,7 +97,7 @@ const CompletionContent: React.FC = ({ localStorage.removeItem(VIDEO_STORAGE_KEY); }; - const loadCompleteVideo = (): { songTaskId: string; videoUrl: string } | null => { + const loadCompleteVideo = (): { songTaskId: string; videoUrl: string; videoDbId?: number } | null => { try { const saved = localStorage.getItem(VIDEO_COMPLETE_KEY); if (!saved) return null; @@ -203,14 +206,14 @@ const CompletionContent: React.FC = ({ const videoUrlFromResponse = statusResponse.render_data?.url; if (videoUrlFromResponse) { - setVideoUrl(videoUrlFromResponse); const videoId = statusResponse.render_data?.video_id; + setVideoUrl(videoUrlFromResponse); if (videoId) { setVideoDbId(videoId); } setVideoStatus('complete'); setStatusMessage(''); - saveToStorage(videoTaskId, currentSongTaskId, 'complete', videoUrlFromResponse); + saveToStorage(videoTaskId, currentSongTaskId, 'complete', videoUrlFromResponse, videoId); } else { throw new Error(t('completion.videoUrlMissing')); } @@ -237,6 +240,7 @@ const CompletionContent: React.FC = ({ const completeVideo = loadCompleteVideo(); if (completeVideo && completeVideo.songTaskId === songTaskId && completeVideo.videoUrl) { setVideoUrl(completeVideo.videoUrl); + if (completeVideo.videoDbId) setVideoDbId(completeVideo.videoDbId); setVideoStatus('complete'); hasStartedGeneration.current = true; return; @@ -247,6 +251,7 @@ const CompletionContent: React.FC = ({ if (savedState && savedState.songTaskId === songTaskId) { if (savedState.status === 'complete' && savedState.videoUrl) { setVideoUrl(savedState.videoUrl); + if (savedState.videoDbId) setVideoDbId(savedState.videoDbId); setVideoStatus('complete'); hasStartedGeneration.current = true; } else if (savedState.status === 'polling') { @@ -506,7 +511,7 @@ const CompletionContent: React.FC = ({