From b6358b5ba86b27a915e6903ec5f3b42867422f3e Mon Sep 17 00:00:00 2001 From: dusk Date: Wed, 13 Aug 2025 06:38:27 +0300 Subject: [PATCH] appview: db: follow: add GetFollowers and GetFollowing functions to fetch Follows Change-Id: vwmxzzsuuxmvxrxskqorsnsplnrqxkrv Signed-off-by: dusk --- appview/db/follow.go | 66 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/appview/db/follow.go b/appview/db/follow.go index 3a5b97f..0e4ad24 100644 --- a/appview/db/follow.go +++ b/appview/db/follow.go @@ -56,7 +56,7 @@ func DeleteFollowByRkey(e Execer, userDid, rkey string) error { func GetFollowerFollowingCount(e Execer, did string) (int, int, error) { followers, following := 0, 0 err := e.QueryRow( - `SELECT + `SELECT COUNT(CASE WHEN subject_did = ? THEN 1 END) AS followers, COUNT(CASE WHEN user_did = ? THEN 1 END) AS following FROM follows;`, did, did).Scan(&followers, &following) @@ -66,6 +66,70 @@ func GetFollowerFollowingCount(e Execer, did string) (int, int, error) { return followers, following, nil } +func GetFollowers(e Execer, did string) ([]Follow, error) { + var followers []Follow + rows, err := e.Query(` + select user_did, subject_did, followed_at, rkey from follows where subject_did = ? + `, did) + if err != nil { + return nil, err + } + for rows.Next() { + var follow Follow + var followedAt string + err := rows.Scan( + &follow.UserDid, + &follow.SubjectDid, + &followedAt, + &follow.Rkey, + ) + if err != nil { + return nil, err + } + followedAtTime, err := time.Parse(time.RFC3339, followedAt) + if err != nil { + log.Println("unable to determine followed at time") + follow.FollowedAt = time.Now() + } else { + follow.FollowedAt = followedAtTime + } + followers = append(followers, follow) + } + return followers, nil +} + +func GetFollowing(e Execer, did string) ([]Follow, error) { + var following []Follow + rows, err := e.Query(` + select user_did, subject_did, followed_at, rkey from follows where user_did = ? + `, did) + if err != nil { + return nil, err + } + for rows.Next() { + var follow Follow + var followedAt string + err := rows.Scan( + &follow.UserDid, + &follow.SubjectDid, + &followedAt, + &follow.Rkey, + ) + if err != nil { + return nil, err + } + followedAtTime, err := time.Parse(time.RFC3339, followedAt) + if err != nil { + log.Println("unable to determine followed at time") + follow.FollowedAt = time.Now() + } else { + follow.FollowedAt = followedAtTime + } + following = append(following, follow) + } + return following, nil +} + type FollowStatus int const ( -- 2.43.0