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

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions