Skip to content

feat: linking services and setting up interactions#6

Merged
stepan41k merged 34 commits into
mainfrom
develop
Apr 2, 2026
Merged

feat: linking services and setting up interactions#6
stepan41k merged 34 commits into
mainfrom
develop

Conversation

@xlurr

@xlurr xlurr commented Mar 31, 2026

Copy link
Copy Markdown
Collaborator

MR: Связка сервисов и настройка взаимодействия

Frontend (xlurr)

  • Синхронизация контрактов (Auth, User) с бэкендом. Внедрена обработка ошибок во всех 8 сторах. Исправлены конфликты TS в основных компонентах.
  • Проброс VITE_* через ARG/ENV. Подготовлены .env.example.
  • Пайплайн GitHub Actions (Typecheck -> Vite build -> Docker build) с кэшированием.
  • Полная документация: запуск, переменные, архитектура и API.

Backend: миграции и БД (stepan41k)

  • Firebird Обновление схемы данных, миграций и наименований таблиц.

Backend — миграции, конфиг и деплой (sudo-odner)

  • Переход конфига на CONFIG_PATH. Настройки FireBird передаются через ENV.
  • Фикс путей миграций и логирования. Изменен порядок: миграции запускаются строго после старта приложения.
  • Настройка и отладка сетевого взаимодействия между всеми контейнерами.

stepan41k and others added 28 commits March 25, 2026 11:04
Инфраструктура подключения:
- VITE_USE_MOCKS=true/false — переключение мок/реальный бэк в .env
- BACKEND_URL — адрес бэка, подставляется в nginx через envsubst в рантайме (без пересборки образа)
- VITE_API_URL намеренно пустой в docker — nginx сам проксирует /api/* → бэк

Новые файлы:
- .env.example — шаблон с описанием каждой переменной
- deploy/.env.example — шаблон для разработчиков бэка
- src/vite-env.d.ts — типы для import.meta.env.*

Изменения в API-слое:
- api/client.ts: BASE читается из VITE_API_URL (fallback → '/api'), добавлен ApiError со статус-кодом, обработка 401 → Token.clear() + redirect
- main.tsx: мок подключается только при VITE_USE_MOCKS=true (dynamic import, в prod-бандл не попадает)
- vite.config.ts: dev proxy с rewrite — /api/auth/login → /login, /api/profile → /profile

Docker:
- Dockerfile: ARG/ENV для VITE_USE_MOCKS, VITE_API_URL, VITE_ENV перед npm run build + CMD с envsubst
- docker-compose.yml: build args из .env, BACKEND_URL пробрасывается в nginx
- deploy/docker-compose.yaml: добавлен frontend-сервис с app-net network

Типы и сторы:
- types/index.ts: AuthResponse под реальный контракт бэка (access_token, refresh_token, profile), User — clientNumber/contractNumber/isReadOnly
- auth-store.ts: Token.set(response.access_token)
- все 8 сторов: добавлено error: string | null + set({ error, loading: false }) в catch

Фиксы совместимости (TypeScript-ошибки из-за расхождения типов после патчей):
- mock-fetch.ts: поля sender/body/createdAt/deposit приведены к типам
- Notifications.tsx: typeConfig fallback для неизвестных типов
- Payments.tsx: ключ typeConfig payment → deposit
- NetworkStatus.tsx: добавлен ключ info в typeConfig
- Profile/Header/Support/SpeedTest: исправлены имена полей под новые типы

Не реализовано (оставлено на следующий этап):
- отдельный nginx-сервис в deploy/docker-compose.yaml
- систематический перенос прямых fetch() из Claude Code среза через api/client.ts
…mments

Два непокрытых бага в сторах и чистка AI-шума.

Исправления:
- profile-store.ts: catch молча глотал ошибку fetch — добавлен error state
  catch { set({ loading: false }) }
  → catch (e: unknown) { set({ error: e instanceof Error ? e.message : '...', loading: false }) }

- speedtest-store.ts: аналогичный баг в двух местах
  fetch → catch без error state
  run   → catch без error state
  Оба исправлены по тому же паттерну

Рефакторинг:
- Удалены AI-шумовые комментарии из src/**/*.{ts,tsx}:
  пустые //, декоративные разделители /* ── X ── */,
  закомментированный старый код, однострочники дублирующие код
- Сохранены: JSDoc, TODO/FIXME, @ts-ignore, WHY-комментарии с контекстом
sudo-odner

This comment was marked as resolved.

@sudo-odner
sudo-odner self-requested a review April 1, 2026 13:27
@sudo-odner sudo-odner changed the title feat: frontend-backend integration + config refactor + CI pipeline feat: linking services and setting up interactions Apr 1, 2026
Comment thread frontend/Dockerfile
Comment thread frontend/nginx.conf
Comment thread nginx/nginx.conf Outdated

location /api/ {
add_header 'Access-Control-Allow-Origin' 'http://localhost:3000' always;
add_header 'Access-Control-Allow-Origin' 'http://localhost' always;

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем порт убрали?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nginx работает как API gateway – принимает все входящие запросы с интернета (пока на http://localhost == http://localhost:80) и наш сайт который так же работет и слушает на 80 порту. Когда от лица сайта мы хотим получить данные с сервера мы кидаем запрос с http://localhost, если в header будет http://localhost:3000 то CORS не даст сделать запрос на сервер, так как http://localhost(наш сайт) != http://localhost:3000.
Ты упоминал, что когда локально тестировал свои приложения у тебя работало на :3000 – это скорее всего из-за npm run dev который запускает на http://localhost:3000, а не на http://localhost

@stepan41k
stepan41k merged commit 62ccebe into main Apr 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants