Перейти к содержимому

Один бэкенд и три фронта под разные роли.

Сервис Стек Таргет Аудитория
poker-api Node, TypeScript, NestJS, Prisma, PostgreSQL, socket.io, pg-boss; pnpm-workspace (apps/server + packages/rating) сервер, HTTP и WS на одном порту все клиенты
poker-player Expo / React Native, expo-router, react-query, zustand, i18next iOS, Android, web-сборка игроки
poker-organizer Expo / React Native, тот же набор прежде всего Expo Web — планшет или ноутбук в заведении владельцы клубов, ТД, дилеры
poker-admin React + Vite, TanStack Router, react-query, zustand, Tailwind статика в dist/ платформенные админы

Связь только по HTTP и WebSocket. Общего кода у фронтов и бэкенда нет — контракт материализован в apps/server/openapi.json (83 пути) и собирается командой pnpm --filter server openapi из CLI-плагина @nestjs/swagger. У приложения игрока из него генерируются типы: pnpm gen:api кладёт результат в src/api/schema.d.ts.

Базовый адрес API у каждого фронта — переменная окружения: VITE_API_URL у админки, EXPO_PUBLIC_API_URL у игрока и организатора. Значение — голый origin без версии; префикс /api/v1 дописывает HTTP-клиент, чтобы он жил в одном месте.

У админки эта переменная — аргумент сборки, а не переменная рантайма. Подробности и последствия — в карточке poker-admin.

  • Денежного контура. entryFee — мёртвая колонка со значением 0, paymentStatus всегда not_required.
  • Ре-энтри, ребаев, аддонов. Вылет окончателен, обратим только через отмену последнего вылета.
  • Учёта нокаутов. Кто кого выбил, не хранится: в рейтинге есть только места и победы.
  • Работающего lateRegLevel. Поле хранится в шаблоне блайндов, но нигде не проверяется.
  • Статуса announced. Он есть в перечислении, но не используется — турнир создаётся сразу в registration.
  • Полноценной пагинации. Ограничения фиксированные: афиша не больше 50, уровневый лидерборд — топ-100, уведомления — последние 50; остальные списки отдаются целиком.
  • Английского интерфейса. Двуязычны только данные, строки интерфейса русские.
  • Нативных сборок. EAS не настроен; рабочие таргеты — Expo Dev Server и web-экспорт.