package msg
import (
"context"
"fmt"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"gitea.dwysokinski.me/twhelp/core/internal/msg/internal/model"
"github.com/ThreeDotsLabs/watermill/message"
)
type EnnoblementPublisher struct {
publisher message.Publisher
marshaler CommandEventMarshaler
}
func NewEnnoblementPublisher(publisher message.Publisher, marshaler CommandEventMarshaler) *EnnoblementPublisher {
return &EnnoblementPublisher{publisher: publisher, marshaler: marshaler}
func (e *EnnoblementPublisher) CmdRefresh(ctx context.Context, payloads ...domain.RefreshEnnoblementsCmdPayload) error {
msgs := make([]*message.Message, 0, len(payloads))
for _, p := range payloads {
msg, err := e.marshaler.Marshal(model.RefreshEnnoblementsCmdPayload(p))
if err != nil {
return fmt.Errorf("%s: couldn't marshal RefreshEnnoblementsCmdPayload: %w", p.Key, err)
msg.SetContext(ctx)
msgs = append(msgs, msg)
if err := e.publisher.Publish(ennoblementsCmdRefresh, msgs...); err != nil {
return fmt.Errorf("%s: publisher.Publish: %w", ennoblementsCmdRefresh, err)
return nil