# poker-admin

Источник: https://docs.novapoker.ru/dev/poker-admin/
Дорожка: разработка
Сверено с кодом: Mon Aug 24
Код: repos/poker-admin/package.json, repos/poker-admin/Dockerfile, repos/poker-admin/nginx.conf

---

Внутренний инструмент команды платформы: клубы, контент, справочники, модерация
игроков, метрики и настройки рейтинга.

**Где код:** `github.com/Klonaps/poker-admin`, локально `repos/poker-admin`.
Снаружи — `admin.novapoker.ru`.

## Стек

React 19, Vite 8, TanStack Router и TanStack Query, zustand, Tailwind 4,
i18next, lucide-react. Обычный SPA, собираемый в статику.

## Как запустить локально

```bash
pnpm --dir repos/poker-admin dev --port 5199 --strictPort
```

## Как собирается и куда деплоится

`pnpm build` — это `tsc -b && vite build`. Дальше multi-stage Dockerfile кладёт
`dist/` в `nginx:alpine`; Dokploy тянет образ и вешает домен.

### Грабля, на которую наступают все

**`VITE_API_URL` — аргумент сборки, а не переменная рантайма.** Vite подставляет
значение прямо в бандл, поэтому сменить адрес API можно **только пересборкой
образа**. В Dokploy он задаётся в Build Args, не в Env: правка переменной
окружения без пересборки не меняет ничего, и это выглядит как «деплой не
применился».

Значение — голый origin (`https://novapoker.ru`), **без** `/api/v1`: префикс
версии дописывает HTTP-клиент в `src/api/client.ts`, чтобы он жил в одном месте.

Как проверить, что реально вшито в прод-бандл: скачать `/assets/index-*.js`
через `curl --compressed` и найти в нём `/api/v1` — рядом стоит стрелочная
функция базового адреса.

## Отдача статики

`nginx.conf` кеширует `/assets/` навсегда (имена содержат хеш содержимого),
отдаёт `index.html` с `no-cache` и заворачивает неизвестные пути в `index.html`:
это SPA с клиентской маршрутизацией, прямой заход на `/organizers` обязан
вернуть приложение, а не 404.

## Тесты

```bash
pnpm test
```

Это `vitest run`. Сетевые запросы в тестах перехватывает msw.

## Что рядом

- [Ландшафт и границы](https://docs.novapoker.ru/dev.md) — как сервис связан с остальными.
