From 8d965bfee909cbf4e7593f264a8ae17bdaa19c71 Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Tue, 2 Jun 2026 13:55:43 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D0=B1=D1=80=D0=B0=D1=81=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20stale=20pricelist=20"failed"=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20NeedSync=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=80=D0=B6=D0=B4=D0=B0=D0=B5=D1=82=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit После сетевого сбоя во время синка прайслистов last_pricelist_status мог оставаться "failed" навсегда, даже если все прайслисты реально скачались и NeedSync() возвращает false (всё актуально). В SyncPricelistsIfNeeded: если NeedSync() == false и статус "failed" — сбрасываем в success и обновляем last_sync_time, чтобы UI убрал "Не докачано". Co-Authored-By: Claude Sonnet 4.6 --- internal/services/sync/service.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/internal/services/sync/service.go b/internal/services/sync/service.go index d8b58f1..9c9d3cf 100644 --- a/internal/services/sync/service.go +++ b/internal/services/sync/service.go @@ -894,6 +894,16 @@ func (s *Service) SyncPricelistsIfNeeded() error { if !needSync { slog.Debug("pricelists are up to date, no sync needed") + // Clear stale "failed" status: if NeedSync confirmed all active server pricelists + // are present locally, any lingering failure flag is outdated. + if strings.EqualFold(s.localDB.GetLastPricelistSyncStatus(), "failed") { + now := time.Now() + if err := s.localDB.SetPricelistSyncResult("success", "", now); err != nil { + slog.Warn("failed to clear stale pricelist sync failure flag", "error", err) + } else { + s.localDB.SetLastSyncTime(now) + } + } return nil }