feat: 플레이리스트 추가 화면 임시저장(draft) 기능

다운로드 시작 전, 수정해둔 값(플레이리스트 URL + 항목별 제목/ID/시작/길이/
ID모드/자릿수채우기)을 폴더당 1개 저장하고 나중에 불러올 수 있게 함.

- db: playlist_drafts 테이블 (folder_id PK, JSON data, updated_at)
- storeDb: savePlaylistDraft/getPlaylistDraft/deletePlaylistDraft
- op: GET/POST/POST(delete) /playlist/draft (하위 폴더 한정)
- UI: 임시저장 / 불러오기 / 삭제 버튼 + 진입 시 기존 draft 자동 감지

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
This commit is contained in:
Claude (owner)
2026-06-06 16:22:42 +09:00
parent 0ec6b06b57
commit 042d9f7059
6 changed files with 292 additions and 1 deletions

View File

@@ -547,3 +547,34 @@ export async function moveUploadIntoVideoDir(
}
}
}
// ─── 플레이리스트 임시저장(draft) ──────────────────────────────────────
// 폴더당 1개의 작업중 상태(JSON 문자열)를 보관. 다운로드 시작 전 수정값을 저장/복원.
export interface PlaylistDraft {
data: string
updatedAt: string
}
export function savePlaylistDraft(folderId: number, data: string): PlaylistDraft {
const now = new Date().toISOString()
getDb()
.prepare(
`INSERT INTO playlist_drafts (folder_id, data, updated_at)
VALUES (?, ?, ?)
ON CONFLICT(folder_id) DO UPDATE SET data = excluded.data, updated_at = excluded.updated_at`
)
.run(folderId, data, now)
return { data, updatedAt: now }
}
export function getPlaylistDraft(folderId: number): PlaylistDraft | null {
const r = getDb()
.prepare(`SELECT data, updated_at FROM playlist_drafts WHERE folder_id = ?`)
.get(folderId) as { data: string; updated_at: string } | undefined
return r ? { data: r.data, updatedAt: r.updated_at } : null
}
export function deletePlaylistDraft(folderId: number): void {
getDb().prepare(`DELETE FROM playlist_drafts WHERE folder_id = ?`).run(folderId)
}