/
external.go
145 lines (115 loc) · 3.81 KB
/
external.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package reactions
import (
"context"
"github.com/rs/zerolog/log"
"github.com/cosmos/cosmos-sdk/types/query"
"github.com/forbole/juno/v5/node/remote"
reactionstypes "github.com/desmos-labs/desmos/v7/x/reactions/types"
"github.com/desmos-labs/athena/v2/types"
)
// RefreshRegisteredReactionsData refreshes the registered reactions data for the given subspace
func (m *Module) RefreshRegisteredReactionsData(height int64, subspaceID uint64) error {
reactions, err := m.queryAllRegisteredReactions(height, subspaceID)
if err != nil {
return err
}
err = m.db.DeleteAllRegisteredReactions(height, subspaceID)
if err != nil {
return err
}
for _, reaction := range reactions {
log.Debug().Uint64("subspace", reaction.SubspaceID).Uint32("reaction", reaction.ID).Msg("refreshing registered reaction")
err = m.db.SaveRegisteredReaction(reaction)
if err != nil {
return err
}
}
return nil
}
// queryAllRegisteredReactions queries all the registered reactions for the given subspace from the node
func (m *Module) queryAllRegisteredReactions(height int64, subspaceID uint64) ([]types.RegisteredReaction, error) {
var reactions []types.RegisteredReaction
var nextKey []byte
var stop = false
for !stop {
res, err := m.client.RegisteredReactions(
remote.GetHeightRequestContext(context.Background(), height),
&reactionstypes.QueryRegisteredReactionsRequest{
SubspaceId: subspaceID,
Pagination: &query.PageRequest{
Key: nextKey,
},
},
)
if err != nil {
return nil, err
}
for _, reaction := range res.RegisteredReactions {
reactions = append(reactions, types.NewRegisteredReaction(reaction, height))
}
nextKey = res.Pagination.NextKey
stop = nextKey == nil
}
return reactions, nil
}
// --------------------------------------------------------------------------------------------------------------------
// RefreshReactionsData refreshes the reactions data for the given post
func (m *Module) RefreshReactionsData(height int64, subspaceID uint64, postID uint64) error {
postExists, err := m.db.HasPost(height, subspaceID, postID)
if err != nil {
return err
}
// Don't refresh reactions for a post that does not exist
if !postExists {
return nil
}
reactions, err := m.queryAllReactions(height, subspaceID, postID)
if err != nil {
return err
}
err = m.db.DeleteAllReactions(height, subspaceID, postID)
if err != nil {
return err
}
for _, reaction := range reactions {
log.Debug().Uint64("subspace", reaction.SubspaceID).Uint64("post id", reaction.PostID).Uint32("reaction", reaction.ID).Msg("refreshing reaction")
err = m.db.SaveReaction(reaction)
if err != nil {
return err
}
}
return nil
}
// queryAllReactions queries all the reactions for the given post from the node
func (m *Module) queryAllReactions(height int64, subspaceID uint64, postID uint64) ([]types.Reaction, error) {
var reactions []types.Reaction
var nextKey []byte
var stop = false
for !stop {
res, err := m.client.Reactions(
remote.GetHeightRequestContext(context.Background(), height),
&reactionstypes.QueryReactionsRequest{
SubspaceId: subspaceID,
PostId: postID,
Pagination: &query.PageRequest{
Key: nextKey,
},
},
)
if err != nil {
return nil, err
}
for _, reaction := range res.Reactions {
reactions = append(reactions, types.NewReaction(reaction, height))
}
nextKey = res.Pagination.NextKey
stop = nextKey == nil
}
return reactions, nil
}
// --------------------------------------------------------------------------------------------------------------------
// RefreshParamsData refreshes the reactions params for the given subspace
func (m *Module) RefreshParamsData(height int64, subspaceID uint64) error {
log.Info().Uint64("subspace", subspaceID).Msg("refreshing reactions params")
return m.updateReactionParams(height, subspaceID)
}