Контекст
В проекте используется несколько вариантов реализации mutation-хуков на базе @tanstack/react-query: часть хуков уже оформлена по единому контракту (типизированные UseMutationOptions + Omit<'mutationFn'> + ...rest), а часть — в legacy-формате с кастомными Props/interface и ручным прокидыванием onSuccess/onError.
Это создает неоднородность API хуков, повышает стоимость поддержки и усложняет переиспользование опций react-query (например, retry, meta, onSettled, gcTime, networkMode и т.д.). Необходимо привести все mutation-хуки к единому шаблону, принятому в src/features/teams/create/model/useCreateTeam.ts.
Технические требования
- Локация логики:
src/**/model/*.ts, src/**/api/*.ts (хуки с useMutation)
- Инструменты:
TypeScript, @tanstack/react-query, линтер проекта, единый паттерн хуков из useCreateTeam
- Логика работы:
- Для каждого хука в зоне изменений определить
Options-тип в формате Omit<UseMutationOptions<TData, DefaultError, TVariables>, 'mutationFn'>.
- Сигнатуру хука привести к формату
useX({ onSuccess, onError, onSettled, ...rest }: UseXOptions = {}) (набор колбэков — по фактической необходимости).
- В
useMutation передавать ...rest и сохранять существующее бизнес-поведение (mutationFn, meta, toast, invalidateQueries, локальная обработка ошибок), без изменения пользовательской логики.
Список хуков, которые нужно исправить
src/pages/auth/forgot-password/model/useResetPassword.ts
src/pages/auth/forgot-password/model/useSendCode.ts
src/pages/auth/forgot-password/model/useSendPassword.ts
src/pages/auth/signin/model/useSignin.ts
src/pages/auth/signup/model/useSignup.ts
src/pages/auth/signup/model/useSignupConfirm.ts
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: Изменения должны быть только типовыми/структурными; не добавлять лишние ререндеры и повторные сетевые вызовы.
- Ошибки: Сохранить текущую семантику ошибок (
DefaultError, локальные onError, meta.skipGlobalValidationToast там, где уже используется).
- Безопасность: Не ослаблять валидацию входных данных mutation-функций; не удалять существующие guard-проверки и не менять контракт авторизационных/восстановительных сценариев.
Контекст
В проекте используется несколько вариантов реализации mutation-хуков на базе
@tanstack/react-query: часть хуков уже оформлена по единому контракту (типизированныеUseMutationOptions+Omit<'mutationFn'>+...rest), а часть — в legacy-формате с кастомнымиProps/interfaceи ручным прокидываниемonSuccess/onError.Это создает неоднородность API хуков, повышает стоимость поддержки и усложняет переиспользование опций
react-query(например,retry,meta,onSettled,gcTime,networkModeи т.д.). Необходимо привести все mutation-хуки к единому шаблону, принятому вsrc/features/teams/create/model/useCreateTeam.ts.Технические требования
src/**/model/*.ts,src/**/api/*.ts(хуки сuseMutation)TypeScript,@tanstack/react-query, линтер проекта, единый паттерн хуков изuseCreateTeamOptions-тип в форматеOmit<UseMutationOptions<TData, DefaultError, TVariables>, 'mutationFn'>.useX({ onSuccess, onError, onSettled, ...rest }: UseXOptions = {})(набор колбэков — по фактической необходимости).useMutationпередавать...restи сохранять существующее бизнес-поведение (mutationFn,meta,toast,invalidateQueries, локальная обработка ошибок), без изменения пользовательской логики.Список хуков, которые нужно исправить
src/pages/auth/forgot-password/model/useResetPassword.tssrc/pages/auth/forgot-password/model/useSendCode.tssrc/pages/auth/forgot-password/model/useSendPassword.tssrc/pages/auth/signin/model/useSignin.tssrc/pages/auth/signup/model/useSignup.tssrc/pages/auth/signup/model/useSignupConfirm.tsЦель и критерии приемки (Definition of Done)
Use...Optionsна основеUseMutationOptionsсOmit<'mutationFn'>.react-query-опции через...rest, а кастомные колбэки (onSuccess,onError,onSettled) корректно прокидываются без потери текущего поведения.pnpm lint/npm run lintпроходит без новых ошибок.UseMutationOptions), устранены type-errors, проверена совместимость с текущими местами вызова хуков.Важные указания
DefaultError, локальныеonError,meta.skipGlobalValidationToastтам, где уже используется).