Контекст
Текущие 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
- Логика работы:
- Ввести единый источник текущей команды (
slug/id) и общий hook/helper для чтения team-контекста во всех team-вкладках.
- Подключить
members к TeamQueries.getMembers(slug) и реализовать состояния loading / empty / error без fallback на моки.
- Подключить
invites к TeamQueries.getInvitations(slug), форматирование createdAt/expiresAt вынести в mapper.
- Подключить
settings к TeamQueries.getTeam(slug) с безопасной reinitialize-стратегией формы без потери пользовательских правок.
- Подключить мутации (
updateTeam, inviteMember, updateMember, removeMember, removeInvitation) через единый слой с общим post-action: toast, invalidateQueries/refetch, унифицированная обработка ошибок.
- Сделать
MemberCard и InviteCard презентационными (без доменной логики/моков), API->UI трансформации вынести в model/selectors.
- Удалить использование
src/pages/team/model/mock.ts из runtime-цепочки; при необходимости оставить только изолированные dev-fixtures.
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: Исключить лишние
refetch (валидировать только затронутые query-ключи), использовать селекторы/мемоизацию для derived-полей.
- Ошибки: Нормализовать ошибки API в единый формат (например,
code/message), показывать user-friendly toast для 4xx/5xx и fallback-состояния в UI.
- Безопасность: Валидировать
slug/id до вызовов API, не выполнять мутации без актуального team-контекста, исключить утечки данных между командами через некорректные query keys.
Контекст
Текущие 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.tsNext.js App Router,@tanstack/react-query,TypeScript,sonner(toast), существующиеTeamHttp/TeamQueriesslug/id) и общийhook/helperдля чтения team-контекста во всех team-вкладках.membersкTeamQueries.getMembers(slug)и реализовать состоянияloading/empty/errorбез fallback на моки.invitesкTeamQueries.getInvitations(slug), форматированиеcreatedAt/expiresAtвынести в mapper.settingsкTeamQueries.getTeam(slug)с безопаснойreinitialize-стратегией формы без потери пользовательских правок.updateTeam,inviteMember,updateMember,removeMember,removeInvitation) через единый слой с общим post-action:toast,invalidateQueries/refetch, унифицированная обработка ошибок.MemberCardиInviteCardпрезентационными (без доменной логики/моков), API->UI трансформации вынести вmodel/selectors.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-моки.toast, устранены//todo: mockв team-runtime, пройдены линтеры и типизация.Важные указания
refetch(валидировать только затронутые query-ключи), использовать селекторы/мемоизацию для derived-полей.code/message), показывать user-friendly toast для 4xx/5xx и fallback-состояния в UI.slug/idдо вызовов API, не выполнять мутации без актуального team-контекста, исключить утечки данных между командами через некорректные query keys.