versia-go/internal/tasks/handler.go

54 lines
1.2 KiB
Go
Raw Permalink Normal View History

2024-08-11 03:51:22 +02:00
package tasks
import (
"context"
"encoding/json"
2024-08-28 00:25:25 +02:00
"github.com/versia-pub/versia-go/internal/repository"
"github.com/versia-pub/versia-go/internal/service"
2024-08-11 03:51:22 +02:00
"git.devminer.xyz/devminer/unitel"
"github.com/go-logr/logr"
2024-08-28 00:25:25 +02:00
"github.com/versia-pub/versia-go/pkg/taskqueue"
2024-08-11 03:51:22 +02:00
)
const (
FederateNote = "federate_note"
FederateFollow = "federate_follow"
)
type Handler struct {
federationService service.FederationService
repositories repository.Manager
telemetry *unitel.Telemetry
log logr.Logger
}
func NewHandler(federationService service.FederationService, repositories repository.Manager, telemetry *unitel.Telemetry, log logr.Logger) *Handler {
return &Handler{
federationService: federationService,
repositories: repositories,
telemetry: telemetry,
log: log,
}
}
func (t *Handler) Register(tq *taskqueue.Client) {
tq.RegisterHandler(FederateNote, parse(t.FederateNote))
tq.RegisterHandler(FederateFollow, parse(t.FederateFollow))
}
func parse[T any](handler func(context.Context, T) error) func(context.Context, taskqueue.Task) error {
return func(ctx context.Context, task taskqueue.Task) error {
var data T
if err := json.Unmarshal(task.Payload, &data); err != nil {
return err
}
return handler(ctx, data)
}
}