feature/backoffice #6

Merged
mats merged 24 commits from feature/backoffice into main 2025-10-16 09:46:07 +02:00
Showing only changes of commit b918f406df - Show all commits

View File

@@ -3,6 +3,7 @@ package main
import (
"context"
"errors"
"fmt"
"log"
"net/http"
"os"
@@ -12,6 +13,7 @@ import (
actor "git.tornberg.me/go-cart-actor/pkg/actor"
"git.tornberg.me/go-cart-actor/pkg/cart"
messages "git.tornberg.me/go-cart-actor/pkg/messages"
"github.com/matst80/slask-finder/pkg/messaging"
amqp "github.com/rabbitmq/amqp091-go"
)
@@ -52,59 +54,21 @@ func buildRegistry() actor.MutationRegistry {
return reg
}
func startMutationConsumer(ctx context.Context, amqpURL string, hub *Hub) error {
conn, err := amqp.Dial(amqpURL)
if err != nil {
return err
}
func startMutationConsumer(ctx context.Context, conn *amqp.Connection, hub *Hub) error {
ch, err := conn.Channel()
if err != nil {
_ = conn.Close()
return err
}
msgs, err := messaging.DeclareBindAndConsume(ch, "cart", "mutation")
if err != nil {
_ = ch.Close()
return err
}
// declare exchange (idempotent)
if err := ch.ExchangeDeclare(
"cart", // name
"topic", // type
true, // durable
false, // autoDelete
false, // internal
false, // noWait
nil, // args
); err != nil {
_ = ch.Close()
_ = conn.Close()
return err
}
// declare an exclusive, auto-deleted queue by default
q, err := ch.QueueDeclare(
"", // name -> let server generate
false, // durable
true, // autoDelete
true, // exclusive
false, // noWait
nil, // args
)
if err != nil {
_ = ch.Close()
_ = conn.Close()
return err
}
if err := ch.QueueBind(q.Name, "mutation", "cart", false, nil); err != nil {
_ = ch.Close()
_ = conn.Close()
return err
}
msgs, err := ch.Consume(q.Name, "backoffice", true, true, false, false, nil)
if err != nil {
_ = ch.Close()
_ = conn.Close()
return err
}
go func() {
defer ch.Close()
defer conn.Close()
for {
select {
case <-ctx.Done():
@@ -185,7 +149,11 @@ func main() {
defer cancel()
if amqpURL != "" {
if err := startMutationConsumer(ctx, amqpURL, hub); err != nil {
conn, err := amqp.Dial(amqpURL)
if err != nil {
fmt.Errorf("failed to connect to RabbitMQ: %w", err)
}
if err := startMutationConsumer(ctx, conn, hub); err != nil {
log.Printf("AMQP listener disabled: %v", err)
} else {
log.Printf("AMQP listener connected")