This repository has been archived on 2024-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
core-old/internal/msg/consumer_ennoblement.go
Dawid Wysokiński 75aba22cf8
All checks were successful
continuous-integration/drone/push Build is passing
feat: server - add new fields (#149)
Reviewed-on: twhelp/core#149
2022-12-29 10:02:21 +00:00

73 lines
1.8 KiB
Go

package msg
import (
"context"
"fmt"
"gitea.dwysokinski.me/twhelp/core/internal/msg/internal/model"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill/message"
)
//counterfeiter:generate -o internal/mock/ennoblement_service.gen.go . EnnoblementService
type EnnoblementService interface {
Refresh(ctx context.Context, key, url string) error
}
type EnnoblementConsumer struct {
marshaler CommandEventMarshaler
publisher message.Publisher
subscriber message.Subscriber
logger watermill.LoggerAdapter
svc EnnoblementService
}
func NewEnnoblementConsumer(
marshaler CommandEventMarshaler,
publisher message.Publisher,
subscriber message.Subscriber,
logger watermill.LoggerAdapter,
svc EnnoblementService,
) *EnnoblementConsumer {
return &EnnoblementConsumer{
marshaler: marshaler,
publisher: publisher,
subscriber: subscriber,
logger: logger,
svc: svc,
}
}
func (e *EnnoblementConsumer) Register(router *message.Router) {
router.AddHandler(
"EnnoblementConsumer.refresh",
ennoblementsCmdRefresh,
e.subscriber,
ennoblementsEventRefreshed,
e.publisher,
e.refresh,
)
}
func (e *EnnoblementConsumer) refresh(msg *message.Message) ([]*message.Message, error) {
var payload model.RefreshEnnoblementsCmdPayload
if err := e.marshaler.Unmarshal(msg, &payload); err != nil {
e.logger.Error("invalid payload, dropping message", err, watermill.LogFields{
"handler_name": message.HandlerNameFromCtx(msg.Context()),
})
return nil, nil
}
if err := e.svc.Refresh(msg.Context(), payload.Key, payload.URL); err != nil {
return nil, fmt.Errorf("EnnoblementService.Refresh: %w", err)
}
ev, err := e.marshaler.Marshal(model.EnnoblementsRefreshedEvPayload(payload))
if err != nil {
return nil, fmt.Errorf("marshaler.Marshal: %w", err)
}
return []*message.Message{ev}, nil
}