mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-09-13 16:23:08 +00:00
fix(users): показывать причину отказа при удалении подписки
Дополнение к PR #542 при мерже. Обработчик глушил ошибку целиком и показывал общее «Ошибка». Между тем сервер отвечает ровно теми словами, которые админу и нужны: открытый временный доступ (409, «сначала заверши или восстанови grace»), активная платная без force (409), подписки нет (404). Первый случай автор сам описал в PR как штатный сценарий — и именно он выглядел как сломанная кнопка. Прокинул getApiErrorMessage, он для этого в репозитории и заведён и уже используется в восьми других местах. Логику force не трогал: она совпадает с сервером. Сериализуемое is_active собирается в _build_subscription_info как `status == active AND end_date > now`, то есть в точности серверное свойство Subscription.is_active, по которому и стоит защита. Разъехаться значения могут только в безопасную сторону: подписка успела истечь между загрузкой страницы и нажатием — тогда защиты нет и на сервере.
This commit is contained in:
@@ -28,6 +28,7 @@ import { ActivityTab } from '../components/admin/userDetail/ActivityTab';
|
||||
import { TicketsTab } from '../components/admin/userDetail/TicketsTab';
|
||||
import { InfoTab } from '../components/admin/userDetail/InfoTab';
|
||||
import { SubscriptionTab } from '../components/admin/userDetail/SubscriptionTab';
|
||||
import { getApiErrorMessage } from '../utils/api-error';
|
||||
import { toNumber } from '../utils/inputHelpers';
|
||||
import { usePermissionStore } from '../store/permissions';
|
||||
|
||||
@@ -673,8 +674,12 @@ export default function AdminUserDetail() {
|
||||
notify.success(t('admin.users.detail.subscription.deleted'), t('common.success'));
|
||||
setSubscriptionDetailView(false);
|
||||
await loadUser();
|
||||
} catch {
|
||||
notify.error(t('admin.users.userActions.error'), t('common.error'));
|
||||
} catch (err) {
|
||||
// Отказы тут осмысленные и действенные: открытый временный доступ
|
||||
// (409, «сначала заверши или восстанови grace»), активная платная без
|
||||
// force (409), подписки нет (404). Общее «Ошибка» оставило бы админа
|
||||
// гадать, почему кнопка не сработала, — показываем текст сервера.
|
||||
notify.error(getApiErrorMessage(err, t('admin.users.userActions.error')), t('common.error'));
|
||||
} finally {
|
||||
setActionLoading(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user