Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

216 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TradeVerse

TradeVerse — бесплатная браузерная экономическая игра-симулятор: торговля акциями и криптовалютой, рынок недвижимости/бизнесов/авто, майнинг-фермы, компании игроков, еженедельное PvP-событие «Крыша города» и лидерборд. Проект состоит из двух частей: backend на FastAPI + MongoDB и frontend на React 19 + Vite.

Стартовый баланс: $15 000 на каждого нового игрока. 1 WarCoin = $50.


Содержание


Архитектура

┌─────────────────────────┐         HTTP / JWT          ┌──────────────────────────┐
│  Frontend (React + Vite)│  ─────────────────────────► │  Backend (FastAPI)       │
│  http://localhost:20300 │  ◄───────────────────────── │  http://localhost:20301  │
└─────────────────────────┘   REST /api/* + WebSocket    └────────────┬─────────────┘
                                                                       │ Motor (async)
                                                                       ▼
                                                            ┌──────────────────────┐
                                                            │  MongoDB (tradeverse)│
                                                            └──────────────────────┘
  • Frontend — SPA на react-router-dom (публичная Landing для гостей, Dashboard после логина с вкладками через внутренний activeTab, а не отдельные роуты). В dev-режиме Vite проксирует /api на backend.
  • Backend — асинхронный FastAPI-сервер, один APIRouter на фичу, вся бизнес-логика подключена в main.py. Данные — в MongoDB через Motor (без ORM).
  • Аутентификация — JWT-пара: короткоживущий access-токен (по умолчанию 30 мин) + непрозрачный ротируемый refresh-токен (скользящее окно, хранится в БД только как SHA-256-хеш).
  • Realtime — WebSocket (/ws?token=<JWT>) пушит баланс, уведомления, изменения рынка и лидерборда; поллинг на фронтенде остаётся резервным механизмом.
  • Единый фоновый планировщик (scheduler.py) — один asyncio-цикл обслуживает все системы (рыночные данные, аренда, майнинг, «Крыша города»), а не отдельный цикл на каждую.
  • Единый денежный реестр (ledger.py) — любое движение денег игрока проходит через одну точку, что даёт целостную историю транзакций и аналитику.

Технологический стек

Слой Технологии
Frontend React 19, React Router 7, Vite 8, lucide-react (иконки), i18next / react-i18next, oxlint. Без Redux — состояние на React-хуках + localStorage. Кастомный CSS с CSS-переменными (тёмная тема).
Backend Python 3, FastAPI, Uvicorn, Motor (async MongoDB), Pydantic v2, bcrypt, PyJWT, python-dotenv, httpx.
База данных MongoDB (нативный драйвер Motor, без ORM).
Внешние данные CoinGecko (курсы криптовалют, работает без ключа); Finnhub / TwelveData — опционально для внешних котировок.

Требования

  • Node.js (LTS) и npm — для frontend
  • Python 3.10+ и pip — для backend
  • MongoDB — удалённый или локальный инстанс (строка подключения в backend/.env)

Быстрый старт

В корне репозитория есть общий package.json, который поднимает оба сервиса одной командой (использует concurrently).

npm run install:all   # npm install (frontend) + pip install -r requirements.txt (backend)
npm run dev           # frontend на :20300, backend на :20301, оба с автоперезагрузкой

Либо запускать сервисы вручную в двух терминалах:

1. Backend

cd backend
pip install -r requirements.txt
cp .env.example .env   # заполните MONGODB_URL, JWT_SECRET, ADMIN_PASSWORD — см. «Безопасность и секреты»
python main.py
# или: uvicorn main:app --host 0.0.0.0 --port 20301 --reload

Проверка, что backend поднялся:

curl http://localhost:20301/api/health
# {"status":"ok"}

При первом старте автоматически создаются индексы MongoDB, admin-пользователь, дефолтные акции (AAPL, GOOGL, MSFT, TSLA, NVDA) и конфиг приложения.

2. Frontend

cd frontend
npm install
cp .env.example .env   # при необходимости укажите VITE_API_URL
npm run dev

Frontend поднимется на http://localhost:20300. Интерактивная документация API (Swagger) — на http://localhost:20301/docs.


Backend

Переменные окружения (backend/.env)

Скопируйте backend/.env.example в backend/.env и заполните значения. Ключевые переменные:

Переменная Назначение
MONGODB_URL Строка подключения к MongoDB
JWT_SECRET Секрет для подписи access-токенов (HS256). Обязательно смените — при дефолтном значении сервер пишет предупреждение в лог
ADMIN_PASSWORD Пароль дефолтного admin-аккаунта, создаваемого при первом запуске. Если не задать — сервер сгенерирует случайный пароль и один раз выведет его в лог
ACCESS_TOKEN_EXPIRE_MINUTES Срок жизни access-токена, минуты (по умолчанию 30)
REFRESH_TOKEN_EXPIRE_DAYS Срок жизни refresh-токена, дни, скользящее окно (по умолчанию 30)
COINGECKO_API_KEY / COINGECKO_API_PLAN Курсы криптовалют — public API CoinGecko работает и без ключа
FINNHUB_API_KEY / TWELVEDATA_API_KEY Опционально, для внешних котировок акций (выберите один провайдер)
MARKET_REFRESH_SECONDS, MARKET_CRYPTO_COUNT Частота обновления рыночных данных и количество отслеживаемых монет

Запуск

python main.py
# или
uvicorn main:app --host 0.0.0.0 --port 20301 --reload

Аутентификация и роли

  • Пароли хешируются через bcrypt.
  • При регистрации/логине выдаётся пара токенов: access (JWT HS256, короткоживущий) и refresh (непрозрачная строка, ротируется при каждом обновлении).
  • Access-токен передаётся в заголовке Authorization: Bearer <token>; обновление — через POST /api/auth/refresh.
  • Роли: user (по умолчанию) и admin (управление экономикой, пользователями, конфигом, ценами).

Модель данных

Данные лежат в MongoDB без схемы ORM; ключевые коллекции — пользователи (users), денежный реестр транзакций, акции/крипта и позиции по ним, активы игроков (user_assets) и рынок активов (asset_market), компании и их сотрудники, история цен (price_history), события экономики, майнинг-фермы и оборудование, сессии/сезоны «Крыши города», refresh-токены (TTL-индекс — истёкшие удаляются автоматически) и уведомления. Полный список создаваемых индексов — в lifespan внутри backend/main.py.


Frontend

Запуск и скрипты

npm run dev      # dev-сервер (Vite, http://localhost:20300)
npm run build    # production-сборка в dist/
npm run preview  # локальный предпросмотр сборки
npm run lint     # линтинг (oxlint)

Переменные окружения

  • VITE_API_URL — базовый URL backend API.

Устройство приложения

  • Маршрутизация — react-router-dom: / рендерит Landing (гость) или Dashboard (авторизован), /login — форма входа, неизвестные пути ведут на корень.
  • Внутри Dashboard разделы игры переключаются локальным состоянием activeTab (не отдельными роутами) — Sidebar определяет пункты меню, Dashboard.renderContent() — таблицу соответствия вкладка → компонент.
  • Состояние — без Redux/Context: React-хуки + localStorage (ключ tradeverse_user хранит пользователя вместе с access/refresh-токенами). Все обращения к API идут через services/api.js и хуки useApi / useApiOnMount.
  • Realtime — WebSocket-соединение, которое Dashboard открывает и переподключает самостоятельно (с учётом ротации access-токена), плюс NotificationCenter для всплывающих уведомлений.

Игровые системы

Аккаунт и профиль

  • Регистрация / вход — создание аккаунта с автовыдачей JWT-пары; логин возвращает access + refresh-токен.
  • TradeVerse Card — уникальный номер карты вида XXXX-XXXX-XXXX-XXXXX, генерируется при регистрации. Видимость можно скрыть/показать.
  • Баланс — стартовые $15 000; обновляется в реальном времени по WebSocket (balance-событие).
  • Еженедельная аналитика — карточки дохода/расходов/нетто за последние 7 дней + интерактивный график по дням; число операций.
  • История транзакций — полная лента всех денежных движений с фильтром по типу и поиском.

Банк и переводы

  • Перевод игроку — отправить деньги другому игроку по нику, с необязательным комментарием.
  • Обзор — сводка: текущий баланс, недельный доход/расход, состояние крипто-кошелька.
  • История переводов — таблица входящих и исходящих транзакций.
  • Аналитика — тот же недельный chart доходов и расходов, что в AccountTab, доступен из банковского раздела.

Акции

  • Динамический рынок — цена реагирует на объём сделок: ΔP = P × K × (Qty / TotalShares). Покупка двигает вверх и уменьшает пул; продажа — наоборот.
  • Торговля — покупка и продажа по рыночной цене; торговая комиссия 0.5% «сгорает».
  • Портфель — список позиций с текущей стоимостью и P&L.
  • История цен — OHLC-свечи и линейный график; доступны разные временны́е интервалы.
  • Сортировка и поиск — по капитализации, по лидерам роста, по лидерам падения.
  • Лёгкий прогноз — индикатор вероятности роста на базе % изменения (не финансовая рекомендация).
  • Боты-маркетмейкеры — каждый тик планировщика с вероятностью 40% каждая системная акция получает симулированную сделку, поддерживающую ликвидность.
  • Пользовательские акции (IPO) — владелец компании может разместить акцию на бирже: указывает тикер и число акций. Комиссия размещения $5 000; основатель получает 20% бумаг.
  • Дивиденды — эмитент выплачивает дивиденды на акцию всем держателям из своего баланса.
  • Отзыв акции — эмитент может снять акцию компании с биржи.

Криптовалюта

  • Открытие счёта — единоразовое действие; после открытия игрок получает адрес кошелька.
  • Рынок — котировки синхронизируются с реальными данными CoinGecko; между обновлениями цена «дышит» случайным блужданием.
  • Торговля — покупка и продажа по рыночной цене.
  • Перевод крипты — отправить монеты другому игроку по нику и тикеру монеты; с подтверждением через диалог.
  • История переводов — лента всех входящих и исходящих крипто-операций.
  • Портфель — текущие остатки по всем монетам и их USD-стоимость.
  • История цен — график котировок с несколькими интервалами.
  • Сортировка — по капитализации, лидеры роста/падения за 24 ч.
  • Прогноз — вероятность роста с учётом momentum изменения и давления спроса.
  • Компанейская крипта — владелец компании может эмитировать собственный токен (символ + supply + название) и отозвать его.

Активы: недвижимость, бизнес, авто

Рынок активов

Тип Редкости Примеры
🏠 Недвижимость common → legendary Студия, Квартира, Таунхаус, Вилла, Пентхаус, Замок
🏢 Бизнес common → legendary Шаурмячная, Кофейня, Автомойка, Завод, IT-студия (4 тира)
🚗 Авто common → legendary Городской авто, Седан, Спорткар, Суперкар
  • Каталог с фильтрами по типу и поиском по названию.
  • Цена актива и суточный доход зависят от редкости (common 2.4%/сутки → legendary 7.8%/сутки).
  • Покупка списывает деньги из баланса; актив появляется в инвентаре.

Пассивный доход

  • Бизнес/аренда — суточная ставка = текущая стоимость × % редкости; накапливается и собирается вручную (или автоматически бизнесами Крыши города).
  • Максимальное накопление — 24 ч; сверх не начисляется.

Улучшение

  • Апгрейд уровня (1–∞) повышает стоимость актива и доход. Новая стоимость: цена × (1 + 0.35 × (level - 1)).

Тюнинг автомобилей

Семь деталей (5 уровней каждая), влияющих на стоимость авто:

Деталь Влияние
Двигатель (engine) Производительность
Турбо (turbo) Мощность
Трансмиссия (gearbox) Разгон
Подвеска (suspension) Управляемость
Тормоза (brakes) Безопасность
Шины (tires) Сцепление
Выхлоп (exhaust) Тюнинг

Стоимость детали растёт с ценой авто и уровнем; 70% вложений идут в рыночную стоимость авто.

Аренда

  • Выставить актив в аренду (тип: недвижимость, авто, бизнес).
  • Ожидание арендатора: 1–48 ч (случайно), срок аренды до 720 ч (30 суток).
  • Доход начисляется пропорционально времени аренды.

Материалы для бизнеса

  • Закупка материалов (за $, цена зависит от экономики и мировых событий).
  • Каждая единица даёт +1% к доходу бизнеса (максимум +30%).

Продажа и передача

  • Продать актив обратно на рынок — 70% текущей стоимости.
  • Передать актив в компанию (доход засчитывается компании, а не владельцу).

Компании

  • Создание — стоимость $10 000; один игрок — одна компания.
  • Настройки — название (2–40 символов), описание (до 200 символов), логотип (эмодзи, ссылка или загруженное изображение до 700 КБ, кроп 256×256), режим «Открытая» и видимость в поиске.
  • Приглашение сотрудников — только с согласия приглашённого; роли: intern, worker, manager, engineer, director.
  • Зарплаты — владелец задаёт зарплату каждому сотруднику; выплаты из бюджета компании автоматически.
  • Зарплата владельца — можно назначить себе зарплату из бюджета.
  • Бюджет компании — пополнение из личного баланса и вывод обратно.
  • Сбор прибыли — доход с активов, переданных компании, накапливается и собирается нажатием кнопки.
  • Активы компании — просмотр всей собственности компании в панели CompanyAssetsPanel.
  • История операций — полная лента транзакций компании.
  • Поиск и вступление — список открытых компаний, подать заявку о вступлении.
  • IPO — разместить акцию компании на бирже (см. раздел Акции).
  • Дивиденды — выплатить дивиденды на акцию всем держателям.
  • Криптовалюта компании — эмитировать токен (symbol, supply, name); отозвать токен.
  • Роспуск / выход — владелец распускает компанию; сотрудник покидает по своей воле.

Майнинг-фермы

Создание и конфигурация

  • Создать ферму (имя, кошелёк для дохода).
  • Установить компоненты из инвентаря (купленных в магазине):
Категория Обязательна Кол-во
Материнская плата (motherboard) 1
Процессор (cpu) 1
Блок питания (psu) 1
ОЗУ (ram) 1
SSD (ssd) 1
Охлаждение (cooling) 1
Видеокарты (gpu) 1+
Вентиляторы (fan) несколько
Корпус/стойка (case/rack) 1
ИБП (ups) 1
Сеть (network) 1
  • Снять любой компонент обратно в инвентарь.

Управление добычей

  • Запуск / остановка майнинга.
  • Выбор монеты для добычи (или авто-выбор наиболее прибыльной).
  • Разгон — ползунок 0.8× – 1.5× (коммитится по отпусканию, чтобы не спамить запросами).
  • Ремонт фермы — восстановление износа оборудования.

ИИ-управляющий

  • Покупка (базовая $25 000) и прокачка (до 5 уровней, +$15 000 каждый).
  • Авто-ремонт при достижении порога износа (растёт с уровнем управляющего).
  • Зарплата управляющего списывается из дохода фермы ($40 × уровень в час).

Реальтайм-показатели

  • Хешрейт (H/s), температура, потребляемая мощность (Вт), уровень износа (%), расчётный доход.
  • Доход зависит от: характеристик GPU, температуры, износа, стоимости электроэнергии (настраивается), курса крипты, эффективности охлаждения и разгона.
  • Максимальное накопление оффлайн: 6 ч; тик добычи — не чаще раза в 5 минут.

Крыша города (PvP)

Еженедельное PvP-событие за 12 зданий на интерактивной карте. Валюта событий — WarCoin (WC).

Карта зданий

Здание Доход/сутки Игровой эффект
🏪 Центральный рынок $55 000 +5% к доходу активов
🏦 Городской банк $85 000 +5% к доходу компании
🎰 Казино «Роял» $120 000 −10% к цене WarCoin
⚓ Морской порт $70 000 −8% к ценам в магазине
🛍️ Торговый центр $60 000 +5% к доходу активов
🏭 Завод $90 000 +10% к доходу майнинга
🏟️ Стадион $50 000 ежесуточный кэш
✈️ Аэропорт $110 000 −10% к ценам в магазине
🏨 Гранд-отель $45 000 +15% к доходу аренды
🏢 Бизнес-башня $100 000 +8% к доходу компании
🎬 Киностудия $48 000 +5% к доходу активов
⛽ Нефтебаза $115 000 −15% к расходу на электричество

Эффекты применяются к конкретным игровым подсистемам (аренда, майнинг, компания, магазин) и реально работают в коде.

Механика захвата

  • Нажать «Атаковать» → списывается 10 WC.
  • Открывается мини-игра: угадать секретную комбинацию (аналог «Быки и Коровы»), максимум 8 попыток.
  • Угадал — здание переходит игроку; не угадал — прогресс сбрасывается, нужно платить заново.

Защита

Уровень Стоимость (WC) Эффект
1 1 000 Увеличивает длину комбинации
2 3 000 Длиннее и сложнее
3 4 000 Ещё сложнее
4 6 500 Практически невозможно угадать
5 10 000 Максимальная защита

Покупка WarCoin

  • Покупается за $ (1 WC = $50 по умолчанию, настраивается администратором).
  • Лиги: Bronze ($0+), Silver ($50k+), Gold ($250k+), Platinum ($1M+) — косметический статус, не влияет на цену.

Сезон

  • Сезон длится неделю; при смене ISO-недели автоматически подводятся итоги.
  • Победитель (больше всего зданий) получает 500 WC в награду.
  • Карта обнуляется, история сезона сохраняется.
  • КД дохода здания — персональный (каждые 5 минут); при смене владельца недособранный КД наследуется.

IT-студия

  • Владелец актива «IT-студия» (4 тира) может заказать атаку или защиту через студию.
  • Выполняется за 1–3 ч реального времени; оплата в $.
  • Стоимость, шанс успеха и опыт зависят от тира студии.

СМИ — разоблачения

Требует актив «Медиахолдинг» в инвентаре.

  • Цель — выбрать компанию или игрока (с хотя бы одним бизнесом).
  • Взнос — минимум $5 000, максимум $100 000 000; «сгорает» и не переходит цели.
  • Кулдаун — 24 ч на одну пару заказчик→цель.
  • Подготовка — новость готовится 15–120 мин (случайно); нет мгновенного эффекта.
  • Шанс успеха — от 40% (мин. взнос) до 85% (при взносе ~$500 000+).
Исход Эффект на цель Длительность
✅ Успех −15%…−80% к доходу бизнесов, −15% к цене акции (если есть) 12–36 ч
❌ Провал (эффект Стрейзанда) +15% к доходу бизнесов 12–36 ч
  • Заказчик и цель получают push-уведомления об исходе.
  • Публичная лента — последние 30 разоблачений видны всем (статус: готовится / успех / провал).

Магазин оборудования

Каталог железа для майнинг-ферм:

Категория Примеры характеристик
GPU hashrate (H/s), потребление (W), охлаждение
CPU ядра, частота
Материнская плата слоты GPU
БП (PSU) мощность (W)
ОЗУ / SSD объём (GB)
Охлаждение эффективность cooling
Вентиляторы cooling
Корпус / Стойка ёмкость вентиляторов
ИБП (UPS) защита от перебоев
Сеть сетевое подключение
  • Цены рассчитываются на сервере из характеристик и текущих экономических множителей — никогда не хранятся статично.
  • Скидка до −8%/−10% при владении Портом / Аэропортом на Крыше города.

Лидерборд

Чистый капитал = наличные + акции + крипта + физические активы + компания (бюджет + её активы) + WarCoin (×$50).

  • Сортировка: по капиталу, по прибыли, по наличным, по акциям, по крипте, по активам, по компании.
  • Лимит: топ-100 игроков.
  • Кэш 12 сек — тяжёлый обсчёт не повторяется на каждый запрос.
  • Игрок может скрыть себя из рейтинга в настройках (leaderboard_lock не даёт менять настройку самостоятельно после блокировки).

Мировые экономические события

Запускаются автоматически (редко) или вручную администратором. Временно изменяют цены и коэффициенты доходов по отраслям:

Событие Эффект Длительность
📉 Экономический кризис −15% ко всем активам, −20% доходов 12 ч
🏗️ Строительный бум +20% к недвижимости, +20% к материалам 10 ч
🏖️ Туристический сезон +10% недвижимость, +25% отели, +20% аренда 24 ч
⛽ Рост цен на топливо −12% авто, −5% бизнес, +8% материалы 10 ч
🏦 Банковская реформа +10% ко всем доходам 14 ч
🏭 Промышленный рост +15% бизнес, +8% доходов, +5% материалы 12 ч
🚀 Технологический прорыв +10% бизнес, +6% крипта 12 ч
📦 Дефицит материалов +15% недвижимость, +10% авто, +45% материалы 8 ч

Уведомления

  • Push-уведомления через WebSocket: разоблачения, результаты IT-студии, смена владельца зданий, дивиденды, приглашения в компанию и др.
  • NotificationCenter — всплывающая панель с лентой уведомлений и отметкой «прочитано».
  • Каждое уведомление хранится в БД; непрочитанные — отдельно.

Настройки

  • Смена никнейма — уникальная проверка.
  • Смена пароля — с подтверждением старого.
  • Аватар — загрузить/удалить; клиентский кроп до 256×256 px (data URL, без файлового хранилища).
  • Язык интерфейса — русский 🇷🇺 / English 🇬🇧; выбор сохраняется в localStorage.
  • Тема — тёмная / светлая.
  • Видимость в лидерборде — скрыть/показать себя в рейтинге.

Админ-панель

Доступна только роли admin; кнопка появляется в правом углу Dashboard.

Управление пользователями

  • Список всех игроков с поиском.
  • Редактирование: никнейм, баланс, роль (user / admin), номер карты, флаг скрытия из лидерборда.
  • Просмотр полного имущества игрока: активы, майнинг-фермы, компания, бизнесы Крыши города.
  • Удаление пользователя.
  • Живое обновление у других открытых админ-панелей через WebSocket (push_to_admins).

Управление акциями

  • Создать / обновить акцию (symbol, name, price, change%).
  • Удалить акцию.
  • Конфигурация биржи: волатильность (volatility_k), общий пул акций (total_shares), пороги событий, максимальный размер ордера.
  • Просмотр ордеров ботов.

Транзакции

  • Список всех транзакций (до 500 последних).
  • Удаление транзакции.

Экономика

  • Изменение коэффициентов в реальном времени:
    • income_mult — общий множитель доходов.
    • rent_mult — множитель аренды.
    • tax_rate — налог на операции (0–50%).
    • energy_cost — стоимость электроэнергии ($/kWh) для майнинга.
    • wc_price — цена WarCoin.
    • economy_mult — мастер-множитель экономики.
  • Запуск/остановка мировых экономических событий.
  • Аналитика экономики: общий капитал игроков, распределение по активам.

Редактор цен

  • PriceEditorTab — ручная коррекция цен активов на рынке.

Конфигурация приложения

  • Произвольные ключи конфига (header_title, app_version, sidebar_menu и др.).

API

Базовый префикс — /api. Полная и всегда актуальная спецификация — в Swagger UI на /docs (или ReDoc на /redoc). Основные группы эндпоинтов:

Группа Примеры путей Auth
Аутентификация POST /api/register, POST /api/login, POST /api/auth/refresh, POST /api/auth/logout, GET /api/user/me частично
Экономика/переводы /api/transfer, /api/account/transactions
Акции v2 /api/v2/stocks/* (рынок, портфель, ордера)
Крипто /api/crypto/* (рынок, кошелёк, сделки)
Активы /api/assets/* (рынок, покупка, аренда, апгрейд)
Компании /api/company/* (создание, приглашения, зарплаты)
Майнинг /api/mining/* (фермы, оборудование, тик добычи)
Крыша города /api/cityroof/* (карта, захват, защита, WarCoin)
Магазин /api/shop/* (каталог оборудования)
СМИ /api/media/* (статус, цели, лента, заказать разоблачение)
Рыночные данные /api/market/* (история цен, избранное) частично
Уведомления /api/notifications/*
Профиль /api/user/* (никнейм, пароль, аватар)
Админ-экономика /api/admin/economy/* (коэффициенты, аналитика, события) admin
Служебное GET /api/health
Realtime WS /ws?token=<JWT>

Структура проекта

TradeVerse/
├── backend/
│   ├── main.py            # FastAPI-приложение: wiring роутеров, auth-эндпоинты, lifespan
│   ├── auth.py             # JWT access/refresh, хэширование паролей, get_current_user
│   ├── database.py         # Подключение к MongoDB (Motor), общие helper-функции
│   ├── models.py           # Pydantic-модели документов
│   ├── schemas.py           # Pydantic-схемы валидации запросов/ответов
│   ├── ledger.py            # Единый денежный реестр — все движения баланса идут через него
│   ├── econ.py              # Единая точка чтения экономических коэффициентов + админ-аналитика
│   ├── market_events.py     # Мировые экономические события
│   ├── scheduler.py         # Единый фоновый asyncio-цикл всех систем
│   ├── economy.py           # Переводы между игроками, история операций
│   ├── assets.py            # Рынок недвижимости/бизнесов/авто
│   ├── company.py           # Компании игроков
│   ├── cityroof.py          # PvP-событие «Крыша города»
│   ├── crypto.py            # Криптовалюты
│   ├── stocks.py            # Биржа акций v2
│   ├── market_data.py       # История цен акций/крипты, OHLC-свечи
│   ├── providers.py         # Внешние провайдеры данных (CoinGecko, Finnhub/TwelveData)
│   ├── shop.py               # Магазин оборудования
│   ├── mining.py             # Майнинг-фермы
│   ├── media.py              # СМИ: разоблачения компаний и игроков
│   ├── notifications.py      # Единый механизм push-уведомлений
│   ├── ws.py                 # WebSocket realtime
│   ├── user_profile.py       # Никнейм/пароль/аватар
│   ├── game_config.py        # Игровой баланс аренды и IT-студии
│   ├── timeutil.py           # Утилиты работы со временем (UTC-aware)
│   ├── init_db.py            # Индексы, seed-данные, одноразовые миграции
│   ├── check_schema.py       # Диагностика: печатает коллекции MongoDB и их поля
│   ├── requirements.txt
│   └── .env.example
│
├── frontend/
│   ├── src/
│   │   ├── components/       # React-компоненты (Dashboard, вкладки, AdminPanel, ...)
│   │   ├── hooks/             # useApi, useApiOnMount, useWebSocket
│   │   ├── services/          # api.js — единый клиент REST API
│   │   ├── utils/              # assetAnalytics, hwName и др. клиентские хелперы
│   │   ├── i18n/                # локали ru / en
│   │   ├── App.jsx              # роутинг (react-router-dom), auth-состояние
│   │   └── main.jsx              # точка входа React
│   ├── vite.config.js          # конфиг Vite + прокси /api
│   └── package.json
│
├── package.json           # общие npm-скрипты для запуска обоих сервисов разом
└── README.md

Локализация

Интерфейс поддерживает два языка через i18next:

  • 🇷🇺 Русский (ru) — язык по умолчанию
  • 🇬🇧 English (en)

Файлы переводов — в frontend/src/i18n/locales/. Выбор языка сохраняется в localStorage и переживает перезагрузку страницы. При добавлении новой строки интерфейса ключ нужно завести в обоих файлах локалей.


Безопасность и секреты

Перед публикацией репозитория или деплоем в продакшн:

  1. Не коммитьте backend/.env и frontend/.env — в них реальные пароли/ключи. Используйте .env.example как шаблон; сами .env-файлы должны быть в .gitignore (уже настроено).
  2. Смените JWT_SECRET и ADMIN_PASSWORD на собственные случайные значения — не используйте значения из истории репозитория или демо-конфигов.
  3. Если какой-либо реальный секрет (пароль от БД, JWT-секрет, API-ключ) уже был закоммичен в git — считайте его скомпрометированным и ротируйте (смените пароль/ключ на стороне провайдера); удаления файла из будущих коммитов недостаточно, пока секрет остаётся в истории.
  4. Дефолтный admin-аккаунт создаётся при первом запуске: если ADMIN_PASSWORD не задан в .env, сервер сгенерирует случайный пароль и покажет его в логе один раз — сохраните его сразу.
  5. CORS на backend разрешает только явно перечисленные origin'ы (backend/main.py) — при деплое на свой домен добавьте его в список.

About

TradeVerse — экономическая песочница с элементами PvP

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages