Enhance admin endpoints and queries for improved filtering and management
CI / Backend (build + test) (push) Successful in 1m22s
CI / Frontend (lint + typecheck + build) (push) Successful in 34s

- Updated `ListPaymentRequestsQuery` to include `Kind` and `Search` parameters for better filtering of payment requests.
- Enhanced `ListAuditLogsQuery` to support additional filters: `Source`, `TargetType`, and `Action`, improving audit log retrieval.
- Modified `ListUsersQuery` to accept new filters: `RoleId`, `IsActivated`, `IsBlocked`, and `BillingExpired`, allowing for more granular user management.
- Introduced `DeleteInbound` endpoint to allow deletion of inbounds that are not currently available, enhancing inbound management capabilities.
- Updated frontend API calls to reflect new query parameters and support for additional filtering options in the admin interface.
- Revised API documentation to include new parameters and endpoint functionalities for better clarity and usage guidance.
This commit is contained in:
Leonid Pershin
2026-07-20 10:35:48 +03:00
parent e19860ba46
commit 33ad98cf62
37 changed files with 1115 additions and 124 deletions
+46
View File
@@ -149,6 +149,7 @@ const resources = {
awaitingAdminHint: 'Администратор уведомлён и проверит оплату. Конфиги не отключатся, пока заявка не решена.',
roleChangeTopUp: 'Доплата за смену роли',
roleChangeTopUpHint: 'Новая роль дороже прежней — эта сумма покрывает разницу в цене за оставшуюся часть уже оплаченного периода, срок подписки при этом не меняется.',
subscription: 'Подписка',
},
instructions: {
@@ -272,6 +273,11 @@ const resources = {
manage: 'Управление',
empty: 'Пользователи не найдены.',
total: 'Всего: {{count}}',
allRoles: 'Все роли',
allStatuses: 'Все статусы',
allBilling: 'Любая оплата',
billingExpired: 'Просрочена',
billingPaid: 'Оплачена',
status: {
blocked: 'Заблокирован',
active: 'Активен',
@@ -303,6 +309,8 @@ const resources = {
traffic: 'Трафик',
statusLabel: 'Статус',
allStatuses: 'Все статусы',
allProtocols: 'Все протоколы',
allNodes: 'Все ноды',
created: 'Создан',
empty: 'Конфиги не найдены.',
total: 'Всего: {{count}}',
@@ -313,6 +321,12 @@ const resources = {
rejected: 'Запрос отклонён.',
approve: 'Активировать',
reject: 'Отклонить',
allStatuses: 'Все статусы',
status: {
Pending: 'Ожидает',
Approved: 'Одобрен',
Rejected: 'Отклонён',
},
},
roles: {
create: 'Создать роль',
@@ -368,7 +382,9 @@ const resources = {
defaultBillingEnabledForNewRolesLabel: 'Новые роли по умолчанию с включённым биллингом',
settingsUpdated: 'Настройки биллинга обновлены.',
requestsTitle: 'Заявки на оплату',
searchPlaceholder: 'Поиск по имени пользователя',
allStatuses: 'Все статусы',
allKinds: 'Все виды',
user: 'Пользователь',
period: 'Период',
amount: 'Сумма',
@@ -420,6 +436,8 @@ const resources = {
published: 'Опубликован',
unpublished: 'Не опубликован',
unavailable: 'Недоступен на панели',
inboundDeleted: 'Инбаунд удалён.',
confirmDeleteInbound: 'Удалить инбаунд? Все ещё активные конфиги на нём будут отозваны.',
publishSaved: 'Настройки публикации сохранены.',
displayName: 'Отображаемое имя',
allowedRoles: 'Доступно ролям',
@@ -478,6 +496,8 @@ const resources = {
approved: 'Заявка одобрена, роль выдана.',
reject: 'Отклонить',
rejected: 'Заявка отклонена.',
allTypes: 'Все типы',
allStatuses: 'Все статусы',
},
audit: {
time: 'Время',
@@ -485,6 +505,9 @@ const resources = {
target: 'Объект',
source: 'Источник',
empty: 'Журнал аудита пуст.',
actionPlaceholder: 'Поиск по действию',
allSources: 'Все источники',
allTargetTypes: 'Все типы объектов',
},
maintenance: {
closedTickets: {
@@ -694,6 +717,7 @@ const resources = {
awaitingAdminHint: 'The administrator has been notified and will verify the payment. Configs stay active until the request is decided.',
roleChangeTopUp: 'Role change top-up',
roleChangeTopUpHint: "Your new role costs more than the old one — this amount covers the price difference for the remaining part of your already-paid period; your subscription end date doesn't change.",
subscription: 'Subscription',
},
instructions: {
@@ -817,6 +841,11 @@ const resources = {
manage: 'Manage',
empty: 'No users found.',
total: 'Total: {{count}}',
allRoles: 'All roles',
allStatuses: 'All statuses',
allBilling: 'Any billing',
billingExpired: 'Expired',
billingPaid: 'Paid',
status: {
blocked: 'Blocked',
active: 'Active',
@@ -848,6 +877,8 @@ const resources = {
traffic: 'Traffic',
statusLabel: 'Status',
allStatuses: 'All statuses',
allProtocols: 'All protocols',
allNodes: 'All nodes',
created: 'Created',
empty: 'No configs found.',
total: 'Total: {{count}}',
@@ -858,6 +889,12 @@ const resources = {
rejected: 'Request rejected.',
approve: 'Approve',
reject: 'Reject',
allStatuses: 'All statuses',
status: {
Pending: 'Pending',
Approved: 'Approved',
Rejected: 'Rejected',
},
},
roles: {
create: 'Create role',
@@ -913,7 +950,9 @@ const resources = {
defaultBillingEnabledForNewRolesLabel: 'New roles default to billing enabled',
settingsUpdated: 'Billing settings updated.',
requestsTitle: 'Payment requests',
searchPlaceholder: 'Search by username',
allStatuses: 'All statuses',
allKinds: 'All kinds',
user: 'User',
period: 'Period',
amount: 'Amount',
@@ -965,6 +1004,8 @@ const resources = {
published: 'Published',
unpublished: 'Not published',
unavailable: 'Unavailable on panel',
inboundDeleted: 'Inbound deleted.',
confirmDeleteInbound: 'Delete this inbound? Any still-active configs on it will be revoked.',
publishSaved: 'Publishing settings saved.',
displayName: 'Display name',
allowedRoles: 'Allowed for roles',
@@ -1023,6 +1064,8 @@ const resources = {
approved: 'Request approved, role granted.',
reject: 'Reject',
rejected: 'Request rejected.',
allTypes: 'All types',
allStatuses: 'All statuses',
},
audit: {
time: 'Time',
@@ -1030,6 +1073,9 @@ const resources = {
target: 'Target',
source: 'Source',
empty: 'The audit log is empty.',
actionPlaceholder: 'Search by action',
allSources: 'All sources',
allTargetTypes: 'All target types',
},
maintenance: {
closedTickets: {