Skip to content

[Refactor] Унификация mutation-хуков по эталону useCreateTeam #60

@kapitulin24

Description

@kapitulin24

Контекст

В проекте используется несколько вариантов реализации 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
  • Логика работы:
    1. Для каждого хука в зоне изменений определить Options-тип в формате Omit<UseMutationOptions<TData, DefaultError, TVariables>, 'mutationFn'>.
    2. Сигнатуру хука привести к формату useX({ onSuccess, onError, onSettled, ...rest }: UseXOptions = {}) (набор колбэков — по фактической необходимости).
    3. В useMutation передавать ...rest и сохранять существующее бизнес-поведение (mutationFn, meta, toast, invalidateQueries, локальная обработка ошибок), без изменения пользовательской логики.

Список хуков, которые нужно исправить

  1. src/pages/auth/forgot-password/model/useResetPassword.ts
  2. src/pages/auth/forgot-password/model/useSendCode.ts
  3. src/pages/auth/forgot-password/model/useSendPassword.ts
  4. src/pages/auth/signin/model/useSignin.ts
  5. src/pages/auth/signup/model/useSignup.ts
  6. src/pages/auth/signup/model/useSignupConfirm.ts

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

  • База: Для каждого хука из списка добавлены/обновлены типы Use...Options на основе UseMutationOptions с Omit<'mutationFn'>.
  • Функционал: Все перечисленные хуки принимают react-query-опции через ...rest, а кастомные колбэки (onSuccess, onError, onSettled) корректно прокидываются без потери текущего поведения.
  • Лимиты/SLA: Рефакторинг не меняет runtime-поведение запросов; отсутствие деградации UX (тосты, инвалидации, обработка ошибок); pnpm lint/npm run lint проходит без новых ошибок.
  • Интеграция: При необходимости обновлены импорты (UseMutationOptions), устранены type-errors, проверена совместимость с текущими местами вызова хуков.

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

  • Производительность: Изменения должны быть только типовыми/структурными; не добавлять лишние ререндеры и повторные сетевые вызовы.
  • Ошибки: Сохранить текущую семантику ошибок (DefaultError, локальные onError, meta.skipGlobalValidationToast там, где уже используется).
  • Безопасность: Не ослаблять валидацию входных данных mutation-функций; не удалять существующие guard-проверки и не менять контракт авторизационных/восстановительных сценариев.

Metadata

Metadata

Assignees

Type

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions