Skip to content

[Refactoring] Удаление тегов (tags) из домена команд (Team) #53

@kapitulin24

Description

@kapitulin24

Контекст

В сущности Team заложена поддержка тегов: поле tags в Zod-схемах создания/обновления команды, отдельная схема SyncTagsBody и HTTP-метод TeamHttp.syncTags (PUT /teams/{slug}/tags). На UI функционал не реализован — остались заглушки (//todo tags, tags: [''] при создании команды). Это создаёт рассинхрон с API-контрактами, лишние типы и риск отправки некорректных данных на бэкенд.

Задача — полностью убрать tags из фронтенд-слоя команд и согласовать изменения с бэкендом (если эндпоинт/поле ещё существуют).

Важно: не трогать несвязанные вхождения tags (Storybook tags: ['autodocs'], Docker/metadata tags в CI, Grafana dashboard tags).


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

  • Локация логики:
    • src/entities/team/model/schemas.ts
    • src/entities/team/model/types.ts
    • src/entities/team/api/http.ts
    • src/features/teams/create/model/useCreateTeamForm.ts
    • src/features/teams/create/model/schemas.ts (наследует STeam.CreateTeamBody — проверить, что схема остаётся валидной)
    • src/pages/team/model/settings.ts (наследует STeam.UpdateTeamBody)
    • src/pages/team/ui/settings/SettingsPage.tsx
  • Инструменты: TypeScript, Zod v4 (zod/v4), React Hook Form, TanStack Query, внутренний HTTP-клиент api() с contract validation.
  • Логика работы:
    1. Удалить поле tags из CreateTeamBody в schemas.ts (включая superRefine на дубликаты тегов).
    2. Удалить экспорт SyncTagsBody и связанную валидацию (min/max 15, проверка дубликатов).
    3. Удалить тип SyncTagsBody из types.ts.
    4. Удалить метод TeamHttp.syncTags(slug, data) и вызов PUT /teams/${slug}/tags из http.ts.
    5. В useCreateTeamForm.ts убрать tags: [''] из тела TTeam.CreateTeamBody при createTeam.mutate.
    6. В SettingsPage.tsx удалить комментарии //todo tags в defaultValues и reset.
    7. Прогнать поиск по репозиторию: tags, SyncTags, syncTags, /teams/.*/tags — убедиться, что в домене team не осталось ссылок.

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

  • База: из src/entities/team удалены tags в CreateTeamBody, схема SyncTagsBody, тип SyncTagsBody, метод syncTags в TeamHttp.
  • Функционал: создание команды (useCreateTeamForm) отправляет только name, description, опционально slug; настройки команды (TeamSettingsFormSchema, SaveBar) работают без поля tags; TypeScript-сборка и линтер проходят без ошибок.
  • Лимиты/SLA: нет лишних полей в теле запросов; регрессий в формах создания команды и страницы настроек (/team/settings) нет.
  • Интеграция: при изменении API — фронтенд не вызывает PUT /teams/{slug}/tags;

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

  • Производительность: влияние нейтральное; уменьшается объём валидации Zod и размер тел запросов.
  • Ошибки: после удаления не должно оставаться обращений к TTeam.SyncTagsBody / STeam.SyncTagsBody / TeamHttp.syncTags — иначе ошибки компиляции; при несогласованном бэкенде возможны 400/422 на устаревшие поля.
  • Безопасность: исключить случайную отправку пустых/фиктивных тегов (tags: ['']) при создании команды; не затрагивать RBAC и роли участников (TeamRole, MemberStatus).

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