appview: db: follow: add GetFollowers and GetFollowing functions to fetch Follows #483

merged
opened by ptr.pet targeting master from [deleted fork]: followers-following-list
Changed files
+65 -1
appview
+65 -1
appview/db/follow.go
··· 56 56 func GetFollowerFollowingCount(e Execer, did string) (int, int, error) { 57 57 followers, following := 0, 0 58 58 err := e.QueryRow( 59 - `SELECT 59 + `SELECT 60 60 COUNT(CASE WHEN subject_did = ? THEN 1 END) AS followers, 61 61 COUNT(CASE WHEN user_did = ? THEN 1 END) AS following 62 62 FROM follows;`, did, did).Scan(&followers, &following) ··· 66 66 return followers, following, nil 67 67 } 68 68 69 + func GetFollowers(e Execer, did string) ([]Follow, error) { 70 + var followers []Follow 71 + rows, err := e.Query(` 72 + select user_did, subject_did, followed_at, rkey from follows where subject_did = ? 73 + `, did) 74 + if err != nil { 75 + return nil, err 76 + } 77 + for rows.Next() { 78 + var follow Follow 79 + var followedAt string 80 + err := rows.Scan( 81 + &follow.UserDid, 82 + &follow.SubjectDid, 83 + &followedAt, 84 + &follow.Rkey, 85 + ) 86 + if err != nil { 87 + return nil, err 88 + } 89 + followedAtTime, err := time.Parse(time.RFC3339, followedAt) 90 + if err != nil { 91 + log.Println("unable to determine followed at time") 92 + follow.FollowedAt = time.Now() 93 + } else { 94 + follow.FollowedAt = followedAtTime 95 + } 96 + followers = append(followers, follow) 97 + } 98 + return followers, nil 99 + } 100 + 101 + func GetFollowing(e Execer, did string) ([]Follow, error) { 102 + var following []Follow 103 + rows, err := e.Query(` 104 + select user_did, subject_did, followed_at, rkey from follows where user_did = ? 105 + `, did) 106 + if err != nil { 107 + return nil, err 108 + } 109 + for rows.Next() { 110 + var follow Follow 111 + var followedAt string 112 + err := rows.Scan( 113 + &follow.UserDid, 114 + &follow.SubjectDid, 115 + &followedAt, 116 + &follow.Rkey, 117 + ) 118 + if err != nil { 119 + return nil, err 120 + } 121 + followedAtTime, err := time.Parse(time.RFC3339, followedAt) 122 + if err != nil { 123 + log.Println("unable to determine followed at time") 124 + follow.FollowedAt = time.Now() 125 + } else { 126 + follow.FollowedAt = followedAtTime 127 + } 128 + following = append(following, follow) 129 + } 130 + return following, nil 131 + } 132 + 69 133 type FollowStatus int 70 134 71 135 const (