this repo has no description
at main 72 lines 2.0 kB view raw
1package server 2 3import ( 4 "errors" 5 6 "github.com/labstack/echo/v4" 7 vyletdatabase "github.com/vylet-app/go/database/proto" 8 "github.com/vylet-app/go/generated/handlers" 9 "github.com/vylet-app/go/generated/vylet" 10 "github.com/vylet-app/go/internal/helpers" 11) 12 13func (s *Server) GraphGetActorFollowersRequiresAuth() bool { 14 return false 15} 16 17func (s *Server) HandleGraphGetActorFollowers(e echo.Context, input *handlers.GraphGetActorFollowersInput) (*vylet.GraphGetActorFollowers_Output, *echo.HTTPError) { 18 ctx := e.Request().Context() 19 20 logger := s.logger.With("name", "HandleGraphGetActorFollowers") 21 22 if input.Limit != nil && (*input.Limit < 1 || *input.Limit > 100) { 23 return nil, NewValidationError("limit", "limit must be between 1 and 100") 24 } else if input.Limit == nil { 25 input.Limit = helpers.ToInt64Ptr(25) 26 } 27 28 did, _, err := s.fetchDidHandleFromActor(ctx, input.Actor) 29 if err != nil { 30 if errors.Is(err, ErrActorNotValid) { 31 return nil, NewValidationError("author", "author must be a valid DID or handle") 32 } 33 logger.Error("error did from actor", "err", err) 34 return nil, ErrInternalServerErr 35 } 36 37 resp, err := s.client.Follow.GetFollowersByActor(ctx, &vyletdatabase.GetFollowersByActorRequest{ 38 Did: did, 39 Limit: *input.Limit, 40 Cursor: input.Cursor, 41 }) 42 if err != nil { 43 logger.Error("error getting followers", "err", err) 44 return nil, ErrInternalServerErr 45 } 46 47 dids := make([]string, 0, len(resp.Followers)) 48 for _, f := range resp.Followers { 49 dids = append(dids, f.SubjectDid) 50 } 51 52 profiles, err := s.getProfiles(ctx, dids) 53 if err != nil { 54 logger.Error("error getting profiles", "err", err) 55 return nil, ErrInternalServerErr 56 } 57 58 sortedProfiles := make([]*vylet.ActorDefs_ProfileView, 0, len(profiles)) 59 for _, did := range dids { 60 profile, ok := profiles[did] 61 if !ok { 62 logger.Warn("unable to find profile", "did", did) 63 continue 64 } 65 sortedProfiles = append(sortedProfiles, profile) 66 } 67 68 return &vylet.GraphGetActorFollowers_Output{ 69 Profiles: sortedProfiles, 70 Cursor: resp.Cursor, 71 }, nil 72}