···
-
TheirLikes uint64 `ch:"their_likes"`
-
MyLikes uint64 `ch:"my_likes"`
-
TheirReplies uint64 `ch:"their_replies"`
-
MyReplies uint64 `ch:"my_replies"`
-
FriendConnectionScore float64 `ch:"friend_connection_score"`
-
ClosenessScore float64 `ch:"closeness_score"`
-
InteractionType string `ch:"interaction_type"`
func (u *User) getCloseBy(ctx context.Context, s *Server) ([]CloseBy, error) {
// TODO: this "if you have more than 10" feels a little bit too low?
if !time.Now().After(u.closeByExpiresAt) && len(u.following) > 10 {
···
-
if err := s.conn.Select(ctx, &closeBy, getCloseByQuery, u.did); err != nil {
···
-
coalesce(likes.their_likes, 0) AS their_likes,
-
coalesce(likes.my_likes, 0) AS my_likes,
-
coalesce(replies.their_replies, 0) AS their_replies,
-
coalesce(replies.my_replies, 0) AS my_replies,
-
coalesce(friends.friend_connection_score, 0) AS friend_connection_score,
-
(coalesce(likes.their_likes, 0) + coalesce(likes.my_likes, 0)) * 1.0 +
-
(coalesce(replies.their_replies, 0) + coalesce(replies.my_replies, 0)) * 2.0 +
-
coalesce(friends.friend_connection_score, 0) AS closeness_score,
-
coalesce(likes.their_likes, 0) > 0 AND coalesce(likes.my_likes, 0) > 0, 'mutual_likes',
-
coalesce(replies.their_replies, 0) > 0 AND coalesce(replies.my_replies, 0) > 0, 'mutual_replies',
-
coalesce(likes.my_likes, 0) > 0 OR coalesce(replies.my_replies, 0) > 0, 'one_way_from_me',
-
coalesce(likes.their_likes, 0) > 0 OR coalesce(replies.their_replies, 0) > 0, 'one_way_to_me',
-
coalesce(friends.friend_connection_score, 0) > 0, 'friend_of_friends',
-
SELECT subject_did AS did FROM default.interaction WHERE did = my_did AND kind = 'like'
-
SELECT did FROM default.interaction WHERE subject_did = my_did AND kind = 'like'
-
SELECT parent_did AS did FROM default.post WHERE did = my_did AND parent_did IS NOT NULL
-
SELECT did FROM default.post WHERE parent_did = my_did
-
SELECT i.subject_did AS did
-
FROM default.interaction i
-
AND i.subject_did != my_did
-
coalesce(top_l.did, top_r.did) AS did,
-
(coalesce(top_l.their_likes, 0) + coalesce(top_l.my_likes, 0)) * 1.0 +
-
(coalesce(top_r.their_replies, 0) + coalesce(top_r.my_replies, 0)) * 2.0 AS friend_score
-
SELECT did AS them, count(*) AS their_likes
-
FROM default.interaction
-
WHERE subject_did = my_did AND kind = 'like'
-
SELECT subject_did AS them, count(*) as my_likes
-
FROM default.interaction
-
WHERE did = my_did AND kind = 'like'
-
) AS il ON lm.them = il.them
-
replies_to_you.them AS did,
-
replies_to_you.their_replies,
-
replies_to_them.my_replies
-
SELECT did AS them, count(*) AS their_replies
-
WHERE parent_did = my_did
-
SELECT parent_did AS them, count(*) AS my_replies
-
) AS replies_to_them ON replies_to_you.them = replies_to_them.them
-
) AS top_r ON top_l.did = top_r.did
-
ORDER BY friend_score DESC
-
AND i.subject_did NOT IN (
-
SELECT subject_did FROM default.interaction WHERE did = my_did
-
SELECT did FROM default.interaction WHERE subject_did = my_did
-
SELECT parent_did FROM default.post WHERE did = my_did AND parent_did IS NOT NULL
-
SELECT did FROM default.post WHERE parent_did = my_did
-
sum(their_likes) as their_likes,
-
sum(my_likes) as my_likes
-
FROM default.interaction
-
WHERE did = my_did AND kind = 'like'
-
count(*) AS their_likes,
-
FROM default.interaction
-
WHERE subject_did = my_did AND kind = 'like'
-
) AS likes ON all_dids.did = likes.did
-
sum(their_replies) as their_replies,
-
sum(my_replies) as my_replies
-
WHERE did = my_did AND parent_did IS NOT NULL
-
count(*) AS their_replies,
-
WHERE parent_did = my_did
-
) AS replies ON all_dids.did = replies.did
-
count(*) * 0.3 AS friend_connection_score
-
FROM default.interaction i
-
AND i.subject_did != my_did
-
coalesce(top_l.did, top_r.did) AS did,
-
(coalesce(top_l.their_likes, 0) + coalesce(top_l.my_likes, 0)) * 1.0 +
-
(coalesce(top_r.their_replies, 0) + coalesce(top_r.my_replies, 0)) * 2.0 AS friend_score
-
SELECT did AS them, count(*) AS their_likes
-
FROM default.interaction
-
WHERE subject_did = my_did AND kind = 'like'
-
SELECT subject_did AS them, count(*) as my_likes
-
FROM default.interaction
-
WHERE did = my_did AND kind = 'like'
-
) AS il ON lm.them = il.them
-
replies_to_you.them AS did,
-
replies_to_you.their_replies,
-
replies_to_them.my_replies
-
SELECT did AS them, count(*) AS their_replies
-
WHERE parent_did = my_did
-
SELECT parent_did AS them, count(*) AS my_replies
-
) AS replies_to_them ON replies_to_you.them = replies_to_them.them
-
) AS top_r ON top_l.did = top_r.did
-
ORDER BY friend_score DESC
-
AND i.subject_did NOT IN (
-
SELECT subject_did FROM default.interaction WHERE did = my_did
-
SELECT did FROM default.interaction WHERE subject_did = my_did
-
SELECT parent_did FROM default.post WHERE did = my_did AND parent_did IS NOT NULL
-
SELECT did FROM default.post WHERE parent_did = my_did
-
) AS friends ON all_dids.did = friends.did
-
WHERE all_dids.did IS NOT NULL
-
ORDER BY closeness_score DESC