Перейти к основному содержимому

Назначение

Feature <FeatureName> в <frontend app> реализует пользовательское действие <краткое описание>.

Metadata

ПолеЗначение
App<pin-admin/...>
FSD Layerfeatures/<feature-slug>
Слой влиянияUI + API mutation / query
Файлsrc/features/<feature-slug>/
Статусdraft / approved / deprecated
Реализуемая user story<UC-XX-YY>

Контекст

ПолеЗначение
Где используется<список widgets/pages>
Триггер<кнопка / shortcut / автоматическая>
Целевой actor<TenantAdministrator/FacilityManager/Employee/PlatformAdministrator>
Permission<требуемая роль или RoleGrant>

Связанные API Endpoints

МетодПутьНазначение
POST/api/...<command>
GET/api/...<query для предварительной загрузки>

Состав Слайса

src/features/<feature-slug>/
ui/
<FeatureName>.tsx // главный компонент feature
<FeatureName>Dialog.tsx // диалог (если применимо)
<FeatureName>Form.tsx // форма (если применимо)
api/
api.ts // обёртки над Axios
model/
schema.ts // Zod schema запроса
use-<feature>-mutation.ts // TanStack mutation hook
use-<feature>-query.ts // TanStack query hook
lib/
error-mapping.ts // server code → field path
index.ts // public API

Контракты Mutation / Query

Mutation <MutationName>

ПолеЗначение
EndpointPOST /api/...
Request schema<schema>
Response model<model>
Optimistic updateда / нет (правило отката)
Invalidated query keys<keys>
Confirmation modalда / нет (когда)
Disabled / loading state<правило>
Backend error mapping<code -> поле формы>

Query <QueryName> (если применимо)

ПолеЗначение
EndpointGET /api/...
Query key<keys>
Staleness<staleTime>
Refetch на focusда / нет

UI Flow

  1. <шаг><описание>.
  2. <шаг><описание>.
  3. <шаг><описание>.

Состояния

StateТриггерUIДоступ
Idle<кнопка>Доступна по permission
Loadingsubmitspinner + disabledDisable
Success2xx responseToast + invalidate + close
Validation Error422Form errors mappingКнопка снова active
Forbidden403Forbidden modal
Conflict409 ROW_VERSION_CONFLICTRefetch + warningReset form
Server Error5xxToast + retry buttonКнопка снова active

Формы (если применимо)

  • Zod schema: <schema>.
  • TanStack Form: useForm({ defaultValues, validators }).
  • Field-level validation: <правила>.
  • Server validation mapping: <error.code -> field>.
  • Sensitive fields: <none/list>.
  • Unsaved changes behavior: <блокировка навигации / confirm>.

Permissions

ДействиеPermission
Видеть triggering элемент<View access на ресурс>
Выполнить mutation<Edit / Delete access>

Side Effects

  • Domain events: какие backend события могут возникнуть.
  • Kafka events: какие Kafka события возникают.
  • Audit: что попадает в AuditEvents.
  • Locale strings: ключи i18n.
  • Analytics: какие frontend события публикуются.

Тестирование

#СценарийЧто проверяется
1Successful flow2xx → optimistic + invalidation + close
2Validation error mapping422 → field-level errors
3Forbidden403 → guard message
4Conflict409 → refetch + warning
5Permission guardСкрыто без permission
6Mobile responsiveКорректно на 320–1920+
7Keyboard accessibilityПолный обход с клавиатуры

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные Документы

  • Backend API: docs/03-domain/Pin/03-modules/<module>/api/<endpoint>.md.
  • Backend Command: docs/03-domain/Pin/03-modules/<module>/commands/<command>.md.
  • Use Case: docs/03-domain/Pin/03-modules/<module>/use-cases/<uc>.md.
  • Frontend page: docs/04-frontends/<app>/03-pages/<page>.md.
  • Зависимые entities: docs/04-frontends/<app>/06-entities/<entity>/.