Skip to content

[Feature] Связать UI teams с бизнес-логикой и убрать runtime-моки #45

@kapitulin24

Description

@kapitulin24

Контекст

Текущие team-экраны частично опираются на статические данные и локальные преобразования, что приводит к расхождениям между API-данными и UI, усложняет сопровождение и делает поведение вкладок members / invites / settings непредсказуемым.
Необходимо перевести экран команды на единый источник данных через entities/team (TeamQueries, мутации), вынести API->UI маппинг в модельный слой и удалить runtime-зависимость от src/pages/team/model/mock.ts.


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

  • Локация логики: src/pages/team/**, src/entities/team/**, src/pages/team/model/**, src/shared/config/routes.ts
  • Инструменты: Next.js App Router, @tanstack/react-query, TypeScript, sonner (toast), существующие TeamHttp/TeamQueries
  • Логика работы:
    1. Ввести единый источник текущей команды (slug/id) и общий hook/helper для чтения team-контекста во всех team-вкладках.
    2. Подключить members к TeamQueries.getMembers(slug) и реализовать состояния loading / empty / error без fallback на моки.
    3. Подключить invites к TeamQueries.getInvitations(slug), форматирование createdAt/expiresAt вынести в mapper.
    4. Подключить settings к TeamQueries.getTeam(slug) с безопасной reinitialize-стратегией формы без потери пользовательских правок.
    5. Подключить мутации (updateTeam, inviteMember, updateMember, removeMember, removeInvitation) через единый слой с общим post-action: toast, invalidateQueries/refetch, унифицированная обработка ошибок.
    6. Сделать MemberCard и InviteCard презентационными (без доменной логики/моков), API->UI трансформации вынести в model/selectors.
    7. Удалить использование src/pages/team/model/mock.ts из runtime-цепочки; при необходимости оставить только изолированные dev-fixtures.

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

  • База: Создан единый team-context hook/helper, подключены query-ключи и model-mappers для team-домена.
  • Функционал: Вкладки members / invites / settings полностью работают от API, отображают корректные состояния и не используют runtime-моки.
  • Лимиты/SLA: Переключение вкладок и post-mutation обновление данных выполняются без full reload; визуальная реакция UI на мутации <= 1 сек при штатном ответе API.
  • Интеграция: Обновлены query invalidation-правила, уведомления toast, устранены //todo: mock в team-runtime, пройдены линтеры и типизация.

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

  • Производительность: Исключить лишние refetch (валидировать только затронутые query-ключи), использовать селекторы/мемоизацию для derived-полей.
  • Ошибки: Нормализовать ошибки API в единый формат (например, code/message), показывать user-friendly toast для 4xx/5xx и fallback-состояния в UI.
  • Безопасность: Валидировать slug/id до вызовов API, не выполнять мутации без актуального team-контекста, исключить утечки данных между командами через некорректные query keys.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions