// Изменено: 2026-04-09 // ListQueuesV1 — возвращает только очереди текущего тенанта. // Изоляция: фильтруем SyncQueues по префиксу "{tenantAccessKey}:". package gosqs import ( "net/http" "strings" "shared-sqs/app/interfaces" "shared-sqs/app/models" "shared-sqs/app/utils" log "github.com/sirupsen/logrus" ) func ListQueuesV1(req *http.Request) (int, interfaces.AbstractResponseBody) { requestBody := models.NewListQueuesRequest() ok := utils.REQUEST_TRANSFORMER(requestBody, req, true) if !ok { log.Error("Invalid Request - ListQueuesV1") return utils.CreateErrorResponseV1("InvalidParameterValue", true) } t := getTenantFromContext(req) if t == nil { return utils.CreateErrorResponseV1("InvalidClientTokenId", true) } log.Infof("Listing Queues for tenant: %s", t.ID) queueUrls := make([]string, 0) prefix := t.AccessKey + ":" models.SyncQueues.RLock() for key, queue := range models.SyncQueues.Queues { // Показываем только очереди этого тенанта if strings.HasPrefix(key, prefix) { if strings.HasPrefix(queue.Name, requestBody.QueueNamePrefix) { queueUrls = append(queueUrls, queue.URL) } } } models.SyncQueues.RUnlock() respStruct := models.ListQueuesResponse{ Xmlns: models.BaseXmlns, Metadata: models.BaseResponseMetadata, Result: models.ListQueuesResult{QueueUrls: queueUrls}, } return http.StatusOK, respStruct }