Контекст
В текущей ветке реализуется крупный функциональный блок для управления проектами внутри команды: список проектов, карточки, проектные страницы (overview/boards/settings), действия с проектом (создание, шаринг, архивирование, удаление), а также интеграция в боковую навигацию.
Задача важна для перехода от отдельных UI-экранов к полноценному пользовательскому потоку работы с проектами и унифицированной архитектуре (entities/features/pages/widgets/shared) с поддержкой наблюдаемости фронтенда.
Технические требования
- Локация логики:
app/(protected)/team/(team)/projects/page.tsx,
app/(protected)/team/projects/[projectId]/page.tsx,
app/(protected)/team/projects/[projectId]/settings/page.tsx,
app/projects/[projectId]/page.tsx,
src/pages/team/ui/projects/*,
src/pages/project/ui/boards/*,
src/pages/project/ui/settings/*,
src/widgets/app-sidebar/ui/Projects.tsx,
src/features/projects/*,
src/entities/project/*,
src/shared/config/metrics/FrontendObservability.tsx.
- Инструменты:
Next.js App Router, React, TypeScript, TanStack Query, zod, shadcn/ui, внутренняя API-обвязка в src/shared/api/*.
- Логика работы:
- Реализовать маршруты и страницы проектов с разделением по доменным сценариям: список проектов команды, карточка проекта, публичная/общая страница проекта, настройки проекта, борды.
- Подключить доменные операции через
features: create, archive/restore, share, remove с едиными контрактами entities/project/model/schemas.ts и entities/project/api/*.
- Интегрировать отображение проектов в
sidebar (src/widgets/app-sidebar/ui/Projects.tsx) с действиями управления и корректной обработкой edge-cases: пустой список, состояние загрузки, недоступный проект, ошибка API, устаревшие данные в кэше.
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: минимизировать ререндеры карточек проектов и
sidebar; использовать кэширование и точечную инвалидацию query-ключей вместо полного сброса состояния.
- Ошибки: централизованно обрабатывать сетевые и валидационные ошибки через
src/shared/api/error-utils.ts; для пользовательского слоя использовать унифицированные сообщения и fallback-состояния.
- Безопасность: валидировать входные данные (
projectId, payload мутаций) через схемы; исключить выполнение действий без контекстной проверки команды/проекта; не логировать чувствительные токены/идентификаторы в клиентские метрики.
Контекст
В текущей ветке реализуется крупный функциональный блок для управления проектами внутри команды: список проектов, карточки, проектные страницы (
overview/boards/settings), действия с проектом (создание, шаринг, архивирование, удаление), а также интеграция в боковую навигацию.Задача важна для перехода от отдельных UI-экранов к полноценному пользовательскому потоку работы с проектами и унифицированной архитектуре (
entities/features/pages/widgets/shared) с поддержкой наблюдаемости фронтенда.Технические требования
app/(protected)/team/(team)/projects/page.tsx,app/(protected)/team/projects/[projectId]/page.tsx,app/(protected)/team/projects/[projectId]/settings/page.tsx,app/projects/[projectId]/page.tsx,src/pages/team/ui/projects/*,src/pages/project/ui/boards/*,src/pages/project/ui/settings/*,src/widgets/app-sidebar/ui/Projects.tsx,src/features/projects/*,src/entities/project/*,src/shared/config/metrics/FrontendObservability.tsx.Next.js App Router,React,TypeScript,TanStack Query,zod,shadcn/ui, внутренняя API-обвязка вsrc/shared/api/*.features:create,archive/restore,share,removeс едиными контрактамиentities/project/model/schemas.tsиentities/project/api/*.sidebar(src/widgets/app-sidebar/ui/Projects.tsx) с действиями управления и корректной обработкой edge-cases: пустой список, состояние загрузки, недоступный проект, ошибка API, устаревшие данные в кэше.Цель и критерии приемки (Definition of Done)
index.ts), типы и схемы (zod) дляproject/team/user; маршруты проекта подключены вapp/*.boards/settings, выполнять действияcreate/share/archive/removeи видеть консистентные состояния UI.FrontendObservability), провереныlint/typecheck, при необходимости синхронизированы.envи CI-скрипты для новых переменных/потоков.Важные указания
sidebar; использовать кэширование и точечную инвалидацию query-ключей вместо полного сброса состояния.src/shared/api/error-utils.ts; для пользовательского слоя использовать унифицированные сообщения и fallback-состояния.projectId, payload мутаций) через схемы; исключить выполнение действий без контекстной проверки команды/проекта; не логировать чувствительные токены/идентификаторы в клиентские метрики.