fix(seed): идемпотентность (не плодить демо-тенанта) + персистентность очередей/сообщений в Redis

This commit is contained in:
Repinoid
2026-10-10 14:23:34 +03:00
parent cf369736a0
commit f7fe2f26e5
+17 -3
View File
@@ -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))
}