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)) }