versia-go/internal/service/svc_impls/follow_service_impl.go

103 lines
2.9 KiB
Go
Raw Normal View History

2024-08-11 03:51:22 +02:00
package svc_impls
import (
"context"
"github.com/lysand-org/versia-go/internal/repository"
"github.com/lysand-org/versia-go/internal/service"
2024-08-22 23:03:38 +02:00
"github.com/lysand-org/versia-go/pkg/versia"
2024-08-11 03:51:22 +02:00
"git.devminer.xyz/devminer/unitel"
"github.com/go-logr/logr"
"github.com/google/uuid"
"github.com/lysand-org/versia-go/internal/entity"
)
var _ service.FollowService = (*FollowServiceImpl)(nil)
type FollowServiceImpl struct {
federationService service.FederationService
repositories repository.Manager
telemetry *unitel.Telemetry
log logr.Logger
}
func NewFollowServiceImpl(federationService service.FederationService, repositories repository.Manager, telemetry *unitel.Telemetry, log logr.Logger) *FollowServiceImpl {
return &FollowServiceImpl{
federationService: federationService,
repositories: repositories,
telemetry: telemetry,
log: log,
}
}
func (i FollowServiceImpl) NewFollow(ctx context.Context, follower, followee *entity.User) (*entity.Follow, error) {
2024-08-20 22:43:26 +02:00
s := i.telemetry.StartSpan(ctx, "function", "svc_impls/FollowServiceImpl.NewFollow").
2024-08-11 03:51:22 +02:00
AddAttribute("follower", follower.URI).
AddAttribute("followee", followee.URI)
defer s.End()
ctx = s.Context()
f, err := i.repositories.Follows().Follow(ctx, follower, followee)
if err != nil {
i.log.Error(err, "Failed to create follow", "follower", follower.ID, "followee", followee.ID)
return nil, err
}
s.AddAttribute("followID", f.URI).
AddAttribute("followURI", f.URI)
i.log.V(2).Info("Created follow", "follower", follower.ID, "followee", followee.ID)
return f, nil
}
func (i FollowServiceImpl) GetFollow(ctx context.Context, id uuid.UUID) (*entity.Follow, error) {
2024-08-20 22:43:26 +02:00
s := i.telemetry.StartSpan(ctx, "function", "svc_impls/FollowServiceImpl.GetFollow").
2024-08-11 03:51:22 +02:00
AddAttribute("followID", id)
defer s.End()
ctx = s.Context()
f, err := i.repositories.Follows().GetByID(ctx, id)
if err != nil {
return nil, err
} else if f != nil {
s.AddAttribute("followURI", f.URI)
}
return f, nil
}
func (i FollowServiceImpl) ImportVersiaFollow(ctx context.Context, lFollow *versia.Follow) (*entity.Follow, error) {
s := i.telemetry.StartSpan(ctx, "function", "svc_impls/FollowServiceImpl.ImportVersiaFollow").
2024-08-11 03:51:22 +02:00
AddAttribute("uri", lFollow.URI.String())
defer s.End()
ctx = s.Context()
var f *entity.Follow
if err := i.repositories.Atomic(ctx, func(ctx context.Context, tx repository.Manager) error {
follower, err := i.repositories.Users().Resolve(ctx, lFollow.Author)
if err != nil {
return err
}
s.AddAttribute("follower", follower.URI)
followee, err := i.repositories.Users().Resolve(ctx, lFollow.Followee)
if err != nil {
return err
}
s.AddAttribute("followee", followee.URI)
f, err = i.repositories.Follows().Follow(ctx, follower, followee)
return err
}); err != nil {
return nil, err
}
s.AddAttribute("followID", f.ID).
AddAttribute("followURI", f.URI)
return f, nil
}