Skip to content

Latest commit

 

History

History
53 lines (42 loc) · 3.21 KB

File metadata and controls

53 lines (42 loc) · 3.21 KB

AGENTS.md — fwo-tg

Fight World Online — Telegram Mini App RPG. Игроки выбирают класс, участвуют в PvP-боях на арене, башне и в лесу, прокачивают магии/умения, вступают в кланы.

Быстрый старт для AI-агента

bun install
cd server && bun run migrate-active  # миграция для multiple characters
bun run dev                          # запуск из корня

Структура

fwo-tg/
├── server/           # Бекенд: Hono HTTP + Socket.IO + Mongoose + Telegram Bot (grammy)
├── client/           # Фронтенд: React + React Router + Zustand + tma.js (Telegram Mini App)
├── shared/           # Общие типы и схемы (Character, Item, Clan, Magic, etc.)
├── AGENTS.md         # ← этот файл
└── docs/agents/      # Детальная документация по подсистемам

Ключевые технологии

Слой Технологии
Server HTTP Hono (роутинг), Valibot (валидация), hono/client (типизированный RPC)
Server WS Socket.IO (игровые события, лобби, бои)
Server DB Mongoose 8, MongoDB
Server Bot grammy (Telegram Bot API)
Client React 19, React Router 7, Zustand, tma.js SDK
Сборка Bun, Biome (линтер/форматтер)
Монорепо Bun workspaces

Документация по подсистемам

  • Архитектура — монорепо, алиасы путей, пайплайн данных, конфигурация
  • Сервер — CharacterService, API layer, arena.characters кеш, middleware
  • Клиент — роутинг, Zustand-сторы, ApiClient, хуки
  • Система эффектов — Affect/Effect/LongEffect/Passive, PlayerAffects, EffectService, глобальные флаги
  • Multiple Characters — добавленная фича: несколько персонажей, active, кеш, клиентский UX

Конвенции

  • Все DB-операции над персонажами — только через server/api/character.ts
  • CharacterService — in-memory обёртка над Char документом, с бизнес-логикой
  • arena.characters[id] — глобальный кеш CharacterService по _id
  • owner = Telegram user ID (строка), не уникальный идентификатор
  • HTTP хендлеры используют withValidation() для единообразной обработки ошибок
  • Клиент использует createRequest() поверх типизированного Hono RPC клиента
  • Zustand store: useCharacterStore — единственный источник текущего персонажа на клиенте
  • ProtectedRoute: гидратация стора через useEffect (не в теле компонента)