From 9717b0156cf9cf7de477c911e6e15c7fbe21f73f Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 17 Mar 2026 23:52:25 +0700 Subject: [PATCH] Enhance account synchronization with optional tariff syncing - Updated `syncAccount` function to accept options for selective synchronization. - Modified `syncFromBillmanager` to handle new options for skipping tariff syncs. - Adjusted `TariffsPage` to utilize the new option for syncing only tariffs. - Removed unused tariff tracking from `VpsPage` and updated sync message logic accordingly. --- server/routes/sync.js | 4 +++- src/lib/api.js | 7 +++++-- src/pages/TariffsPage.jsx | 2 +- src/pages/VpsPage.jsx | 7 ++----- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/server/routes/sync.js b/server/routes/sync.js index 3e6470d..e5f070b 100644 --- a/server/routes/sync.js +++ b/server/routes/sync.js @@ -64,6 +64,7 @@ router.post('/:accountId', async (req, res) => { try { const db = getDb() const { accountId } = req.params + const { onlyTariffs = false } = req.body || {} const row = db.prepare('SELECT * FROM provider_accounts WHERE id = ?').get(accountId) if (!row) { return res.status(404).json({ error: 'Account not found' }) @@ -81,7 +82,8 @@ router.post('/:accountId', async (req, res) => { VALUES (?, ?, ?, ?) `).run(logId, accountId, new Date().toISOString(), 'running') - const result = await syncFromBillmanager(row, db) + const opts = onlyTariffs ? { skipVpsPayments: true } : { skipTariffs: true } + const result = await syncFromBillmanager(row, db, opts) db.prepare(` UPDATE sync_log SET finishedAt=?, status=?, vpsCount=?, paymentsCount=? diff --git a/src/lib/api.js b/src/lib/api.js index d97cb8d..80c9309 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -135,8 +135,11 @@ export async function bulkUpdateVps(ids, action, value) { }) } -export async function syncAccount(accountId) { - return fetchApi(`/api/sync/${encodeURIComponent(accountId)}`, { method: 'POST' }) +export async function syncAccount(accountId, opts = {}) { + return fetchApi(`/api/sync/${encodeURIComponent(accountId)}`, { + method: 'POST', + body: JSON.stringify(opts), + }) } export async function fetchAccountBalance(accountId) { diff --git a/src/pages/TariffsPage.jsx b/src/pages/TariffsPage.jsx index 85819eb..b169c41 100644 --- a/src/pages/TariffsPage.jsx +++ b/src/pages/TariffsPage.jsx @@ -147,7 +147,7 @@ export function TariffsPage({ db, actions, settings, ratesData }) { let lastError = null for (const account of billmanagerAccounts) { try { - const result = await syncAccount(account.id) + const result = await syncAccount(account.id, { onlyTariffs: true }) if (result.ok) { totalTariffs += result.synced?.tariffsCount ?? 0 } else { diff --git a/src/pages/VpsPage.jsx b/src/pages/VpsPage.jsx index 6216ee9..e9b40f9 100644 --- a/src/pages/VpsPage.jsx +++ b/src/pages/VpsPage.jsx @@ -328,7 +328,6 @@ export function VpsPage({ db, actions, settings, ratesData }) { setSyncMessage(null) let totalVps = 0 let totalPayments = 0 - let totalTariffs = 0 let lastError = null for (const account of billmanagerAccounts) { try { @@ -336,7 +335,6 @@ export function VpsPage({ db, actions, settings, ratesData }) { if (result.ok) { totalVps += result.synced?.vpsCount ?? 0 totalPayments += result.synced?.paymentsCount ?? 0 - totalTariffs += result.synced?.tariffsCount ?? 0 } else { lastError = result.error } @@ -344,16 +342,15 @@ export function VpsPage({ db, actions, settings, ratesData }) { lastError = err.message } } - if (lastError && totalVps === 0 && totalPayments === 0 && totalTariffs === 0) { + if (lastError && totalVps === 0 && totalPayments === 0) { setSyncMessage(lastError) } else { const parts = [] if (totalVps > 0) parts.push(`${totalVps} VPS`) if (totalPayments > 0) parts.push(`${totalPayments} платежей`) - if (totalTariffs > 0) parts.push(`${totalTariffs} тарифов`) setSyncMessage(`Синхронизировано: ${parts.join(', ')}${lastError ? `. Ошибки: ${lastError}` : ''}`) } - if (totalVps > 0 || totalPayments > 0 || totalTariffs > 0) await actions.refreshData() + if (totalVps > 0 || totalPayments > 0) await actions.refreshData() setSyncLoading(false) }