// Изменено: 2026-04-09 // GetQueueUrlV1 — возвращает URL очереди тенанта по имени. package gosqs import ( "net/http" "shared-sqs/app/interfaces" "shared-sqs/app/models" "shared-sqs/app/utils" log "github.com/sirupsen/logrus" ) func GetQueueUrlV1(req *http.Request) (int, interfaces.AbstractResponseBody) { requestBody := models.NewGetQueueUrlRequest() ok := utils.REQUEST_TRANSFORMER(requestBody, req, false) if !ok { log.Error("Invalid Request - GetQueueUrlV1") return utils.CreateErrorResponseV1("InvalidParameterValue", true) } t := getTenantFromContext(req) if t == nil { return utils.CreateErrorResponseV1("InvalidClientTokenId", true) } queueName := requestBody.QueueName key := tenantQueueKey(t.AccessKey, queueName) // Fix #10: RLock перед чтением SyncQueues — иначе data race models.SyncQueues.RLock() queue, ok := models.SyncQueues.Queues[key] models.SyncQueues.RUnlock() if !ok { log.Errorf("Get Queue URL: %s, queue does not exist for tenant %s", queueName, t.ID) return utils.CreateErrorResponseV1("QueueNotFound", true) } log.Debug("Get Queue URL:", queue.Name) respStruct := models.GetQueueUrlResponse{ Xmlns: models.BaseXmlns, Result: models.GetQueueUrlResult{QueueUrl: queue.URL}, Metadata: models.BaseResponseMetadata, } return http.StatusOK, respStruct }