(low) weightProfiles.ts/useDeleteProfile: JSDoc 'Returns true if deleted' не соответствует поведению (хук возвращает undefined) #1490

Closed
opened 2026-06-15 05:58:38 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: api · Файл: frontend/src/lib/api/weightProfiles.ts:156-172

weightProfiles.ts:156 — JSDoc гласит 'Delete a weight profile by id. Returns true if deleted.', но хук типизирован как useMutation<void, Error, number> и вызывает apiFetch(...) (строки 159-167). apiFetch на DELETE возвращает undefined: при status 204 явно return undefined as T (api.ts:46-48). Бэкенд DELETE отвечает 204 No Content, поэтому хук НИКОГДА не возвращает true — резолвится в undefined. Это контрактная ложь в самой документации файла: будущий потребитель, написавший if (await mutateAsync(id)) {...} в расчёте на документированный boolean, получит falsy и сочтёт удаление неуспешным. Сейчас useDeleteProfile нигде не вызывается (проверено grep: в WeightProfilePanel.tsx импортируются и используются только useWeightProfiles и useCreateProfile), поэтому это латентная ловушка, а не активный баг. Чинить: переписать JSDoc на 'Resolves on success; backend returns 204 No Content' (или, если нужен boolean-контракт, сделать хук возвращающим true). Severity low.

Почему баг: Контракт хука, задокументированный в самом файле, не соответствует реальному поведению: любой будущий потребитель, написавший if (await mutateAsync(id)) {...} в расчёте на документированный boolean, получит undefined (falsy) и сочтёт удаление неуспешным. Сейчас потребителей useDeleteProfile нет (хук экспортируется, но не используется), поэтому это латентная ловушка, а не активный баг — отсюда low.

Как чинить: Исправить JSDoc на «Delete a weight profile by id. Resolves on 204; throws on error.» Либо, если нужен boolean, заменить тип на useMutation<boolean,...> и маппить успех (отсутствие throw) в true в mutationFn.


deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U109

**Severity:** low · **Категория:** api · **Файл:** `frontend/src/lib/api/weightProfiles.ts:156-172` weightProfiles.ts:156 — JSDoc гласит 'Delete a weight profile by id. Returns true if deleted.', но хук типизирован как useMutation<void, Error, number> и вызывает apiFetch<void>(...) (строки 159-167). apiFetch на DELETE возвращает undefined: при status 204 явно `return undefined as T` (api.ts:46-48). Бэкенд DELETE отвечает 204 No Content, поэтому хук НИКОГДА не возвращает true — резолвится в undefined. Это контрактная ложь в самой документации файла: будущий потребитель, написавший `if (await mutateAsync(id)) {...}` в расчёте на документированный boolean, получит falsy и сочтёт удаление неуспешным. Сейчас useDeleteProfile нигде не вызывается (проверено grep: в WeightProfilePanel.tsx импортируются и используются только useWeightProfiles и useCreateProfile), поэтому это латентная ловушка, а не активный баг. Чинить: переписать JSDoc на 'Resolves on success; backend returns 204 No Content' (или, если нужен boolean-контракт, сделать хук возвращающим true). Severity low. **Почему баг:** Контракт хука, задокументированный в самом файле, не соответствует реальному поведению: любой будущий потребитель, написавший `if (await mutateAsync(id)) {...}` в расчёте на документированный boolean, получит undefined (falsy) и сочтёт удаление неуспешным. Сейчас потребителей useDeleteProfile нет (хук экспортируется, но не используется), поэтому это латентная ловушка, а не активный баг — отсюда low. **Как чинить:** Исправить JSDoc на «Delete a weight profile by id. Resolves on 204; throws on error.» Либо, если нужен boolean, заменить тип на `useMutation<boolean,...>` и маппить успех (отсутствие throw) в true в mutationFn. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.92 · unit U109</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:38 +00:00
bot-backend added the
scope/frontend
label 2026-06-15 11:02:13 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1490
No description provided.