···
65
-
func GetReactionCountMap(e Execer, threadAt syntax.ATURI) (map[models.ReactionKind]int, error) {
66
-
countMap := map[models.ReactionKind]int{}
65
+
func GetReactionMap(e Execer, userLimit int, threadAt syntax.ATURI) (map[models.ReactionKind]models.ReactionDisplayData, error) {
67
+
select kind, reacted_by_did,
68
+
row_number() over (partition by kind order by created asc) as rn,
69
+
count(*) over (partition by kind) as total
72
+
order by kind, created asc`
74
+
rows, err := e.Query(query, threadAt)
80
+
reactionMap := map[models.ReactionKind]models.ReactionDisplayData{}
for _, kind := range models.OrderedReactionKinds {
68
-
count, err := GetReactionCount(e, threadAt, kind)
70
-
return map[models.ReactionKind]int{}, nil
82
+
reactionMap[kind] = models.ReactionDisplayData{Count: 0, Users: []string{}}
86
+
var kind models.ReactionKind
89
+
if err := rows.Scan(&kind, &did, &rn, &total); err != nil {
72
-
countMap[kind] = count
93
+
data := reactionMap[kind]
95
+
if userLimit > 0 && rn <= userLimit {
96
+
data.Users = append(data.Users, did)
98
+
reactionMap[kind] = data
74
-
return countMap, nil
101
+
return reactionMap, rows.Err()
func GetReactionStatus(e Execer, userDid string, threadAt syntax.ATURI, kind models.ReactionKind) bool {