2.0 KiB
2.0 KiB
TypeScript Rewrite Plan
The rewrite targets a pnpm workspace-based monorepo with Node.js services and Vue 3 frontends.
Planned Layout
/packages/common: shared utilities and type definitions (RNG/bytes/테스트 RNG 포함, no infra)/packages/infra: Prisma/Redis connectors and other runtime infra/packages/logic: pure game logic with DI and interfaces/app/gateway-frontend: gateway UI/app/gateway-api: gateway service/app/game-frontend: game UI/app/game-api: game backend per server+scenario profile/app/game-engine: turn daemon per server+scenario profile/tools/build-scripts: build and deployment scripts
Current Implementation Notes
packages/infrais live and used by game-api/game-engine services.app/game-apiandapp/game-enginehave initial implementations (tRPC endpoints, turn daemon loop).- Frontend apps remain placeholders while backend/runtime stabilizes.
Runtime Stack (Planned)
- Backend: Node.js + Fastify
- API: tRPC + zod
- ORM: Prisma
- Frontend: Vue 3, Pinia, Vue Router, TailwindCSS, Vite
- Data: PostgreSQL, Redis sessions
- Testing: Vitest
Frontend Direction
- Gateway and game apps are separate SPAs (
/app/gateway-frontend,/app/game-frontend). - UI visuals should stay close to the legacy look, but layout changes are allowed as long as required information is preserved.
- Prefer client-driven rendering: fetch most data via API and let the client own data shaping and presentation unless the data must be hidden.
Constraint Evaluation Contract
The shared constraint contract (daemon vs API precheck split) is documented in
docs/architecture/rewrite-constraints.md.
Legacy Data Migration
- Legacy data is for migration only; the rewrite runtime does not depend on it.
- Once DB migration is complete, legacy data can be retired.
Profiles (Planned)
- Profiles are server+scenario pairs; scenario selection is required for build/runtime.
- Server IDs:
che,kwe,pwe,twe,nya,pya