From f7fe2f26e592fa4ebb7e729acef47a3ca445d5f9 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Sat, 10 Oct 2026 14:23:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(seed):=20=D0=B8=D0=B4=D0=B5=D0=BC=D0=BF?= =?UTF-8?q?=D0=BE=D1=82=D0=B5=D0=BD=D1=82=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?(=D0=BD=D0=B5=20=D0=BF=D0=BB=D0=BE=D0=B4=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B4=D0=B5=D0=BC=D0=BE-=D1=82=D0=B5=D0=BD=D0=B0=D0=BD=D1=82?= =?UTF-8?q?=D0=B0)=20+=20=D0=BF=D0=B5=D1=80=D1=81=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=B9/=D1=81=D0=BE=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20Redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cmd/seed.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/app/cmd/seed.go b/app/cmd/seed.go index 659cbc2..3c20d09 100644 --- a/app/cmd/seed.go +++ b/app/cmd/seed.go @@ -18,6 +18,7 @@ import ( "shared-sqs/app/gosqs" "shared-sqs/app/models" + "shared-sqs/app/persistence" "shared-sqs/app/tenant" ) @@ -31,6 +32,14 @@ const ( // Креды генерируются случайно (tenant.Create) — никаких захардкоженных // AccessKey/SecretKey в исходнике. func seedDemoData(store *tenant.TenantStore) { + // Идемпотентность: если демо-тенант уже есть (восстановлен из Redis) — не плодим копии. + for _, existing := range store.List() { + if existing.Name == demoTenantName { + log.Infof("seed: тенант %s уже существует (%s) — сид пропущен", demoTenantName, existing.ID) + return + } + } + t, err := store.Create(demoTenantName, demoMaxQueues) if err != nil { log.Warnf("seed: не удалось создать demo-tenant: %v", err) @@ -99,8 +108,7 @@ func seedDemoData(store *tenant.TenantStore) { }) } - models.SyncQueues.Lock() - models.SyncQueues.AddQueue(key, &models.Queue{ + queue := &models.Queue{ Name: q.name, URL: queueURL, Arn: queueARN, @@ -109,9 +117,15 @@ func seedDemoData(store *tenant.TenantStore) { MessageRetentionPeriod: 345600, Messages: msgs, Duplicates: make(map[string]time.Time), - }) + } + models.SyncQueues.Lock() + models.SyncQueues.AddQueue(key, queue) models.SyncQueues.Unlock() + // Персистим очередь и сообщения в Redis (иначе после рестарта демо-очереди исчезают). + persistence.SaveQueue(key, queue) + persistence.SaveMessages(key, msgs) + log.Infof("seed: очередь %s (%d сообщений)", q.name, len(q.msgs)) }