feat(ServerManager): automate billing entry creation for new servers; synchronize existing servers with billing records
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m45s

This commit is contained in:
2026-01-20 17:20:47 +07:00
parent ed34332df8
commit d173112bae
+78
View File
@@ -351,6 +351,41 @@ function ServerManager() {
setServers([...servers, serverToAdd]);
handleCloseAddServerModal();
// Автоматически создаём запись в биллинге
(async () => {
try {
const billingRes = await api.get(`/billing`);
const billingData = Array.isArray(billingRes.data) ? billingRes.data : [];
// Проверяем, нет ли уже такого сервера в биллинге
const alreadyExists = billingData.some(b => b.serverId === serverToAdd.id);
if (!alreadyExists) {
const newBillingItem = {
id: `billing-${serverToAdd.id}`,
hostName: serverToAdd.dns || serverToAdd.ip,
purpose: '',
country: serverToAdd.country || '',
provider: serverToAdd.provider || '',
loginUrl: '',
monthlyCost: 0,
monthlyCostCurrency: 'USD',
nextPaymentDate: '',
lastPaymentDate: '',
lastPaymentAmount: 0,
lastPaymentCurrency: 'USD',
status: 'active',
notes: 'Автоматически добавлен из серверов',
serverId: serverToAdd.id,
payments: []
};
await api.post(`/billing`, { domains: [...billingData, newBillingItem] });
}
} catch (e) {
console.warn('Не удалось создать запись биллинга:', e);
}
})();
setSuccess('Сервер успешно добавлен!');
setTimeout(() => setSuccess(''), 3000);
};
@@ -549,6 +584,49 @@ function ServerManager() {
setServers(normalizedServers);
await api.post(`/servers`, { domains: normalizedServers });
await api.post(`/server-connections`, { domains: connections });
// Синхронизация с биллингом: добавляем новые серверы
try {
const billingRes = await api.get(`/billing`);
const billingData = Array.isArray(billingRes.data) ? billingRes.data : [];
// Создаём Set из существующих serverId в биллинге
const existingServerIds = new Set(
billingData.map(b => b.serverId).filter(Boolean)
);
// Находим серверы, которых нет в биллинге
const newBillingItems = normalizedServers
.filter(server => server.id && !existingServerIds.has(server.id))
.map(server => ({
id: `billing-${server.id}`,
hostName: server.dns || server.ip,
purpose: '',
country: server.country || '',
provider: server.provider || '',
loginUrl: '',
monthlyCost: 0,
monthlyCostCurrency: 'USD',
nextPaymentDate: '',
lastPaymentDate: '',
lastPaymentAmount: 0,
lastPaymentCurrency: 'USD',
status: 'active',
notes: `Автоматически добавлен из серверов`,
serverId: server.id,
payments: []
}));
if (newBillingItems.length > 0) {
const updatedBilling = [...billingData, ...newBillingItems];
await api.post(`/billing`, { domains: updatedBilling });
console.log(`Добавлено ${newBillingItems.length} записей в биллинг`);
}
} catch (billingError) {
console.warn('Не удалось синхронизировать биллинг:', billingError);
// Не прерываем основную операцию
}
setSuccess('Изменения успешно сохранены!');
setTimeout(() => setSuccess(''), 3000);
} catch (error) {