Enhance inbound management by removing MaxClients property
CI / Backend (build + test) (push) Successful in 1m23s
CI / Frontend (lint + typecheck + build) (push) Successful in 34s

- Removed the MaxClients property from Inbound-related data models, including InboundDto and PublishInboundCommand.
- Updated related methods and handlers to reflect the removal of MaxClients, ensuring consistent behavior across the application.
- Adjusted API documentation and frontend components to remove references to MaxClients, streamlining the inbound publishing process.
- Enhanced logging in command handlers to handle node unavailability scenarios during user actions.
- Improved database schema and migrations to align with the updated data model.
This commit is contained in:
Leonid Pershin
2026-07-14 23:11:50 +03:00
parent bef3880593
commit 8f6807a456
34 changed files with 1150 additions and 77 deletions
@@ -24,14 +24,13 @@ export function PublishInboundDialog({
const queryClient = useQueryClient()
const [isPublished, setIsPublished] = useState(inbound.isPublished)
const [displayName, setDisplayName] = useState(inbound.displayName ?? inbound.remark)
const [maxClients, setMaxClients] = useState(inbound.maxClients?.toString() ?? '')
const [selectedRoles, setSelectedRoles] = useState<Set<string>>(new Set(inbound.allowedRoleIds))
const rolesQuery = useQuery({ queryKey: ['admin-roles'], queryFn: listRoles, enabled: open })
const mutation = useMutation({
mutationFn: () =>
publishInbound(inbound.id, isPublished, displayName.trim() || undefined, Array.from(selectedRoles), maxClients ? Number(maxClients) : undefined),
publishInbound(inbound.id, isPublished, displayName.trim() || undefined, Array.from(selectedRoles)),
onSuccess: async () => {
toast.success(t('admin.nodes.publishSaved'))
await queryClient.invalidateQueries({ queryKey: ['admin-inbounds', inbound.nodeId] })
@@ -74,10 +73,6 @@ export function PublishInboundDialog({
<Label htmlFor="displayName">{t('admin.nodes.displayName')}</Label>
<Input id="displayName" value={displayName} onChange={(e) => setDisplayName(e.target.value)} />
</div>
<div className="flex flex-col gap-1.5">
<Label htmlFor="maxClients">{t('admin.nodes.maxClients')}</Label>
<Input id="maxClients" type="number" min={0} value={maxClients} onChange={(e) => setMaxClients(e.target.value)} />
</div>
<div className="flex flex-col gap-1.5">
<Label>{t('admin.nodes.allowedRoles')}</Label>
<div className="flex flex-col gap-1">
+1 -2
View File
@@ -10,10 +10,9 @@ export function publishInbound(
isPublished: boolean,
displayName: string | undefined,
allowedRoleIds: string[],
maxClients: number | undefined,
) {
return apiRequest<InboundDto>(`/admin/inbounds/${id}/publish`, {
method: 'PUT',
body: { isPublished, displayName: displayName ?? null, allowedRoleIds, maxClients: maxClients ?? null },
body: { isPublished, displayName: displayName ?? null, allowedRoleIds },
})
}
-4
View File
@@ -1885,8 +1885,6 @@ export interface components {
port: number | string;
isPublished: boolean;
displayName: null | string;
/** Format: int32 */
maxClients: null | number | string;
allowedRoleIds: string[];
/** Format: date-time */
lastSyncAt: null | string;
@@ -1955,8 +1953,6 @@ export interface components {
isPublished: boolean;
displayName: null | string;
allowedRoleIds: null | string[];
/** Format: int32 */
maxClients: null | number | string;
};
RegisterCommand: {
userName: string;
-1
View File
@@ -215,7 +215,6 @@ export type InboundDto = {
port: number
isPublished: boolean
displayName: string | null
maxClients: number | null
allowedRoleIds: string[]
lastSyncAt: string | null
}
-2
View File
@@ -294,7 +294,6 @@ const resources = {
unpublished: 'Не опубликован',
publishSaved: 'Настройки публикации сохранены.',
displayName: 'Отображаемое имя',
maxClients: 'Лимит клиентов (необязательно)',
allowedRoles: 'Доступно ролям',
isPublishedLabel: 'Опубликовать инбаунд',
optional: 'необязательно',
@@ -712,7 +711,6 @@ const resources = {
unpublished: 'Not published',
publishSaved: 'Publishing settings saved.',
displayName: 'Display name',
maxClients: 'Client limit (optional)',
allowedRoles: 'Allowed for roles',
isPublishedLabel: 'Publish inbound',
optional: 'optional',