feat: sync_log таблица и список прайслистов в Support Bundle

- Добавлена таблица sync_log (до 100 записей на тип): фиксирует каждый
  запуск синхронизации с типом, статусом, ошибкой, кол-вом и временем
- AppendSyncLog вызывается из SyncComponents, SyncPricelists (service и
  handler), SyncAll и SyncComponentsIfEmpty
- Bundle теперь включает sync_log.json (200 последних записей) и
  pricelists.json (все скачанные прайслисты, сгруппированные по source)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-02 12:57:28 +03:00
parent 84cab011d3
commit 452811f393
5 changed files with 90 additions and 0 deletions

View File

@@ -327,6 +327,7 @@ func (s *Service) NeedSync() (bool, error) {
// SyncPricelists synchronizes all active pricelists from server to local SQLite
func (s *Service) SyncPricelists() (int, error) {
slog.Info("starting pricelist sync")
plSyncStart := time.Now()
if _, err := s.EnsureReadinessForSync(); err != nil {
return 0, err
}
@@ -335,6 +336,7 @@ func (s *Service) SyncPricelists() (int, error) {
mariaDB, err := s.getDB()
if err != nil {
s.recordPricelistSyncFailure(err)
s.localDB.AppendSyncLog("pricelists", "error", err.Error(), 0, plSyncStart, time.Since(plSyncStart).Milliseconds())
return 0, fmt.Errorf("database not available: %w", err)
}
@@ -421,6 +423,7 @@ func (s *Service) SyncPricelists() (int, error) {
if syncErr != nil {
s.recordPricelistSyncFailure(syncErr)
s.localDB.AppendSyncLog("pricelists", "error", syncErr.Error(), synced, plSyncStart, time.Since(plSyncStart).Milliseconds())
return synced, syncErr
}
@@ -429,6 +432,7 @@ func (s *Service) SyncPricelists() (int, error) {
s.localDB.SetLastSyncTime(now)
s.recordPricelistSyncSuccess(now)
s.RecordSyncHeartbeat()
s.localDB.AppendSyncLog("pricelists", "ok", "", synced, plSyncStart, time.Since(plSyncStart).Milliseconds())
slog.Info("pricelist sync completed", "synced", synced, "total", len(serverPricelists))
return synced, nil