# Holodream Tools ## Card master data Collect the current card-related master data and Korean, English, and Japanese text from the public HolodoriDB diff repositories: ```bash npm run data:sync ``` The generated manifest, raw relational bundle, and card-by-card bundle are written to `data/holodoridb`. Card artwork, movies, and voices are intentionally excluded. ### 카드 표시명 수동 수정 특별 버전명이나 번역 이름은 `data/card-overrides.csv`에서 관리합니다. ```csv cardId,versionName,displayName card-06002-5-uniq-0066-00,수영복, ``` - `cardId`: 수정할 카드의 고유 ID - `versionName`: 기본 이름 옆에 표시할 짧은 버전명 - `displayName`: 기본 멤버 이름을 완전히 바꿀 때만 입력하며, 평소에는 비워 둡니다. 수정 후 `npm run data:sync`를 실행하면 카드 목록에 반영됩니다. 이 파일은 원본 데이터를 다시 수집해도 덮어쓰지 않습니다. ## 브라우저 데이터 사용자 데이터는 서버로 전송하지 않고 현재 브라우저의 `localStorage`에 자동 저장합니다. 별도의 `사용자 데이터` 페이지에서 JSON 백업을 내보내거나 가져오고, 전체 데이터를 초기화할 수 있습니다. - 현재 카드 목록의 출력 조건을 자동으로 복원합니다. - `백업 내보내기`로 버전이 포함된 JSON 파일을 내려받을 수 있습니다. - `백업 가져오기`로 다른 브라우저에서 데이터를 복원할 수 있습니다. - `초기화`는 현재 브라우저에 저장된 수집 내역, 저장 덱, 설정을 모두 기본값으로 되돌립니다. 향후 보유 카드와 저장 덱 기능도 `src/lib/models/user-data.ts`의 동일한 버전 데이터에 저장합니다. 홀로드림스 덱 최적화와 스킬 로스 분석을 통합할 웹사이트의 개발 기반입니다. 현재 단계에는 게임 기능을 포함하지 않습니다. ## 구성 - SvelteKit + TypeScript + `@sveltejs/adapter-node` - SQLite + Drizzle ORM - Web Worker를 위한 독립 모듈 경계 - Docker Compose 개발 환경(HMR) - 멀티 스테이지 production 이미지 - Docker named volume 기반 SQLite 영속 저장소 ## Docker 개발 실행 ```bash docker compose up --build ``` - 웹: - 상태 확인: 소스 파일을 수정하면 Windows의 Docker Desktop에서도 polling 기반 HMR이 동작합니다. 종료: ```bash docker compose down ``` `docker compose down`은 SQLite 볼륨을 보존합니다. 데이터까지 지우려는 경우에만 `docker compose down --volumes`를 사용하세요. ## production 실행 ```bash docker compose -f compose.prod.yaml up --build -d ``` - 웹: - 상태 확인: 종료: ```bash docker compose -f compose.prod.yaml down ``` ## 호스트에서 실행 Node.js 22.12 이상이 필요합니다. ```powershell Copy-Item .env.example .env npm ci npm run dev ``` 기본 로컬 DB 경로는 `./data/holodream.db`입니다. ## 검증 명령 ```bash npm run check npm run build ``` 스키마를 변경한 뒤에는 migration을 생성합니다. ```bash npm run db:generate ``` 생성된 migration은 서버가 시작될 때 자동 적용됩니다. 호스트에서 수동 적용하려면 `npm run db:migrate`를 사용합니다. ## 디렉터리 경계 ```text src/ ├─ lib/ │ ├─ engine/ # UI 프레임워크에 의존하지 않는 순수 계산 로직 │ ├─ models/ # UI·엔진·서버가 공유하는 도메인 타입 │ ├─ server/db/ # SQLite/Drizzle 서버 전용 모듈 │ └─ workers/ # 무거운 최적화 작업의 Web Worker 진입점 └─ routes/ # SvelteKit 화면과 API ``` 의존성 방향은 `UI → Engine → Models`를 유지합니다. 계산 엔진은 Svelte나 서버 모듈을 import하지 않습니다.