Skip to content

[Refactor] Перенести композицию провайдеров в app/providers и упростить app/layout.tsx #48

@kapitulin24

Description

@kapitulin24

Контекст

Сейчас QueryProvider экспортируется из src/shared/providers/index.ts, а корневой app/layout.tsx знает детали композиции (QueryProvider, TooltipProvider, Toaster), что размывает границы слоев и усложняет масштабирование app-level инфраструктуры.
Нужно собрать централизованный AppProviders в app-слое и оставить в layout только единую обертку.

Технические требования

  • Локация логики: app/layout.tsx, новый app/providers/AppProviders.tsx, src/shared/providers/index.ts (миграция/очистка)
  • Инструменты: Next.js App Router, React, @tanstack/react-query, shared/ui (TooltipProvider, Toaster)
  • Логика работы:
    1. Создать app/providers/AppProviders.tsx и собрать там app-level провайдеры (QueryClientProvider, TooltipProvider, при необходимости другие).
    2. Обновить app/layout.tsx: оставить только AppProviders как единый entrypoint провайдеров.
    3. Пересмотреть экспорты в shared/providers: убрать ответственность за app-композицию, оставить только низкоуровневые reusable-части.
    4. Проверить совместимость дерева провайдеров с app/(protected)/layout.tsx (SidebarProvider, AppSidebar) и текущими страницами.

Цель и критерии приемки (Definition of Done)

  • База: Создан app/providers/AppProviders.tsx, определен порядок инициализации всех app-level providers.
  • Функционал: app/layout.tsx не содержит деталей внутренней композиции, приложение работает без регрессий в тултипах, тостах и query-данных.
  • Лимиты/SLA: Инициализация провайдеров не увеличивает TTI относительно базового состояния; отсутствуют лишние повторные создания QueryClient.
  • Интеграция: Обновлены импорты/алиасы, устранены устаревшие экспорты shared/providers, пройдены линтеры/типы.

Важные указания

  • Производительность: QueryClient должен быть стабилен в рамках жизненного цикла приложения, без пересоздания на каждый рендер.
  • Ошибки: При некорректной инициализации провайдера выдавать явную ошибку разработки и не допускать silent-fail.
  • Безопасность: Не допускать рендера protected-контента вне требуемого provider-дерева; сохранить корректные границы клиентских/серверных компонентов.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions