mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 14:28:20 +01:00
57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
|
|
package svc_impls
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"git.devminer.xyz/devminer/unitel"
|
||
|
|
"github.com/go-logr/logr"
|
||
|
|
"github.com/lysand-org/versia-go/internal/entity"
|
||
|
|
"github.com/lysand-org/versia-go/internal/service"
|
||
|
|
"github.com/lysand-org/versia-go/pkg/lysand"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ service.FederationService = (*FederationServiceImpl)(nil)
|
||
|
|
|
||
|
|
type FederationServiceImpl struct {
|
||
|
|
federationClient *lysand.FederationClient
|
||
|
|
|
||
|
|
telemetry *unitel.Telemetry
|
||
|
|
|
||
|
|
log logr.Logger
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewFederationServiceImpl(federationClient *lysand.FederationClient, telemetry *unitel.Telemetry, log logr.Logger) *FederationServiceImpl {
|
||
|
|
return &FederationServiceImpl{
|
||
|
|
federationClient: federationClient,
|
||
|
|
telemetry: telemetry,
|
||
|
|
log: log,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (i FederationServiceImpl) SendToInbox(ctx context.Context, author *entity.User, target *entity.User, object any) ([]byte, error) {
|
||
|
|
s := i.telemetry.StartSpan(ctx, "function", "service/svc_impls.FederationServiceImpl.SendToInbox")
|
||
|
|
defer s.End()
|
||
|
|
ctx = s.Context()
|
||
|
|
|
||
|
|
response, err := i.federationClient.SendToInbox(ctx, author.Signer, target.ToLysand(), object)
|
||
|
|
if err != nil {
|
||
|
|
i.log.Error(err, "Failed to send to inbox", "author", author.ID, "target", target.ID)
|
||
|
|
return response, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return response, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (i FederationServiceImpl) GetUser(ctx context.Context, uri *lysand.URL) (*lysand.User, error) {
|
||
|
|
s := i.telemetry.StartSpan(ctx, "function", "service/svc_impls.FederationServiceImpl.GetUser")
|
||
|
|
defer s.End()
|
||
|
|
ctx = s.Context()
|
||
|
|
|
||
|
|
u, err := i.federationClient.GetUser(ctx, uri.ToStd())
|
||
|
|
if err != nil {
|
||
|
|
i.log.Error(err, "Failed to fetch remote user", "uri", uri)
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return u, nil
|
||
|
|
}
|