-
Notifications
You must be signed in to change notification settings - Fork 45
/
keeper_polls.go
53 lines (45 loc) · 1.83 KB
/
keeper_polls.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
package keeper
import (
"sort"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/desmos-labs/desmos/x/staging/posts/types"
)
// SaveUserAnswer save the user answer inside the current context
// It assumes that the post exists and has a Poll inside it.
// If answer are already present, the old ones will be overridden.
func (k Keeper) SaveUserAnswer(ctx sdk.Context, answer types.UserAnswer) {
store := ctx.KVStore(k.storeKey)
sort.Slice(answer.Answers, func(i, j int) bool {
return answer.Answers[i] < answer.Answers[j]
})
bz := types.MustMarshalUserAnswer(k.cdc, answer)
store.Set(types.UserAnswersStoreKey(answer.PostID, answer.User), bz)
}
// GetUserAnswer returns the user answer created by the given user address and associated to the post having the given id.
// If no user answer could be found, returns false instead.
func (k Keeper) GetUserAnswer(ctx sdk.Context, postID, user string) (types.UserAnswer, bool) {
store := ctx.KVStore(k.storeKey)
key := types.UserAnswersStoreKey(postID, user)
if !store.Has(key) {
return types.UserAnswer{}, false
}
return types.MustUnmarshalUserAnswer(k.cdc, store.Get(key)), true
}
// GetUserAnswersByPost returns the list of all the user answers associated with the given postID that are stored into the current state.
func (k Keeper) GetUserAnswersByPost(ctx sdk.Context, postID string) []types.UserAnswer {
var answers []types.UserAnswer
k.IterateUserAnswersByPost(ctx, postID, func(_ int64, answer types.UserAnswer) bool {
answers = append(answers, answer)
return false
})
return answers
}
// GetAllUserAnswers returns all the user answers.
func (k Keeper) GetAllUserAnswers(ctx sdk.Context) []types.UserAnswer {
var answers []types.UserAnswer
k.IterateUserAnswers(ctx, func(_ int64, answer types.UserAnswer) bool {
answers = append(answers, answer)
return false
})
return answers
}