diff --git a/backend/src/db.js b/backend/src/db.js index adea41d..df74e29 100644 --- a/backend/src/db.js +++ b/backend/src/db.js @@ -403,6 +403,22 @@ async function ensureSchema() { if (templateRequestSourceTierListColumns[0]?.Null !== 'YES') { await query('ALTER TABLE template_requests MODIFY source_tierlist_id VARCHAR(64) NULL') } + const templateRequestTypeColumns = await query("SHOW COLUMNS FROM template_requests LIKE 'request_type'") + if (!templateRequestTypeColumns.length) { + await query("ALTER TABLE template_requests ADD COLUMN request_type VARCHAR(20) NOT NULL DEFAULT 'create' AFTER id") + } + const templateRequestSourceGameColumns = await query("SHOW COLUMNS FROM template_requests LIKE 'source_game_id'") + if (!templateRequestSourceGameColumns.length) { + await query("ALTER TABLE template_requests ADD COLUMN source_game_id VARCHAR(120) NOT NULL DEFAULT 'freeform' AFTER source_tierlist_id") + } + const templateRequestTargetGameColumns = await query("SHOW COLUMNS FROM template_requests LIKE 'target_game_id'") + if (!templateRequestTargetGameColumns.length) { + await query("ALTER TABLE template_requests ADD COLUMN target_game_id VARCHAR(120) NOT NULL DEFAULT '' AFTER source_game_id") + } + const templateRequestStatusColumns = await query("SHOW COLUMNS FROM template_requests LIKE 'status'") + if (!templateRequestStatusColumns.length) { + await query("ALTER TABLE template_requests ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'pending' AFTER target_game_id") + } const templateRequestGroupsColumns = await query("SHOW COLUMNS FROM template_requests LIKE 'groups_json'") if (!templateRequestGroupsColumns.length) { await query("ALTER TABLE template_requests ADD COLUMN groups_json LONGTEXT NOT NULL AFTER items_json") diff --git a/docs/todo.md b/docs/todo.md index 9fc4689..5ee0046 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -20,3 +20,4 @@ - 가이드 모달과 관리자 아이템 모달은 현재 같은 톤의 큰 셸을 쓰므로, 이후 공통 모달 레이아웃 컴포넌트로 분리할지 검토한다. - 관리자 아이템 라이브러리 이름 변경은 템플릿·사용자 업로드·보관 자산까지 모두 가능하므로, 이후에는 일괄 이름 정리나 중복 이름 감지 보조 기능까지 검토한다. +- 템플릿 요청 500 오류 대응으로 `template_requests` 레거시 컬럼 자동 마이그레이션은 반영했으므로, 이후에는 실제 운영 DB에서 재시작 후 요청/승인 흐름을 한 번 더 확인한다. diff --git a/docs/update.md b/docs/update.md index fb48ab7..dae4398 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,9 @@ # 업데이트 로그 +## 2026-04-01 v1.3.41 +- 템플릿 요청 등록 시 500 오류가 날 수 있던 레거시 DB 호환 문제를 보강해, 기존 `template_requests` 테이블에 `request_type`, `source_game_id`, `target_game_id`, `status` 컬럼이 빠져 있어도 서버 시작 시 자동으로 마이그레이션되도록 함. +- 따라서 저장 여부와 무관하게 템플릿 요청 흐름은 유지되고, 구버전 DB를 사용 중이더라도 백엔드 재시작 후 같은 요청이 정상 저장되도록 안정성을 높임. + ## 2026-04-01 v1.3.40 - 관리자 아이템 상세 모달은 내부 스크롤바를 숨기고 본문 스크롤이 배경으로 전파되지 않도록 body scroll lock과 ESC 닫기를 추가해, 검수 중 배경 화면이 함께 움직이던 불편을 줄임. - 관리자 티어표 관리에서는 `완성본 보기` 흐름을 제거하고, 전체 티어표의 추가 아이템을 클릭하면 같은 아이템 관리 모달로 열어 게임 검색·템플릿 추가·새 템플릿 생성까지 같은 문법으로 처리할 수 있게 통일함.