-
Notifications
You must be signed in to change notification settings - Fork 45
/
querier.go
153 lines (135 loc) · 5.01 KB
/
querier.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
146
147
148
149
150
151
152
153
package wasm
import (
"encoding/json"
"github.com/cosmos/cosmos-sdk/codec"
postskeeper "github.com/desmos-labs/desmos/v7/x/posts/keeper"
"github.com/desmos-labs/desmos/v7/x/posts/types"
"cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/desmos-labs/desmos/v7/cosmwasm"
)
var _ cosmwasm.Querier = PostsWasmQuerier{}
type PostsWasmQuerier struct {
postsKeeper *postskeeper.Keeper
cdc codec.Codec
}
func NewPostsWasmQuerier(postsKeeper *postskeeper.Keeper, cdc codec.Codec) PostsWasmQuerier {
return PostsWasmQuerier{postsKeeper: postsKeeper, cdc: cdc}
}
func (querier PostsWasmQuerier) QueryCustom(ctx sdk.Context, data json.RawMessage) ([]byte, error) {
var query types.PostsQuery
err := json.Unmarshal(data, &query)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
var response []byte
switch {
case query.SubspacePosts != nil:
if response, err = querier.handleSubspacePostsRequest(ctx, *query.SubspacePosts); err != nil {
return nil, err
}
case query.SectionPosts != nil:
if response, err = querier.handleSectionPostsRequest(ctx, *query.SectionPosts); err != nil {
return nil, err
}
case query.Post != nil:
if response, err = querier.handlePostRequest(ctx, *query.Post); err != nil {
return nil, err
}
case query.PostAttachments != nil:
if response, err = querier.handlePostAttachmentsRequest(ctx, *query.PostAttachments); err != nil {
return nil, err
}
case query.PollAnswers != nil:
if response, err = querier.handlePollAnswersRequest(ctx, *query.PollAnswers); err != nil {
return nil, err
}
default:
return nil, sdkerrors.ErrInvalidRequest
}
return response, nil
}
func (querier PostsWasmQuerier) handleSubspacePostsRequest(ctx sdk.Context, request json.RawMessage) (bz []byte, err error) {
var PostsReq types.QuerySubspacePostsRequest
err = querier.cdc.UnmarshalJSON(request, &PostsReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
PostsResponse, err := querier.postsKeeper.SubspacePosts(sdk.WrapSDKContext(ctx), &PostsReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
}
bz, err = querier.cdc.MarshalJSON(PostsResponse)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}
func (querier PostsWasmQuerier) handleSectionPostsRequest(ctx sdk.Context, request json.RawMessage) (bz []byte, err error) {
var incomingDtagReq types.QuerySectionPostsRequest
err = querier.cdc.UnmarshalJSON(request, &incomingDtagReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
SectionPostsResponse, err := querier.postsKeeper.SectionPosts(sdk.WrapSDKContext(ctx), &incomingDtagReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
}
bz, err = querier.cdc.MarshalJSON(SectionPostsResponse)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}
func (querier PostsWasmQuerier) handlePostRequest(ctx sdk.Context, request json.RawMessage) (bz []byte, err error) {
var chainLinkReq types.QueryPostRequest
err = querier.cdc.UnmarshalJSON(request, &chainLinkReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
PostResponse, err := querier.postsKeeper.Post(sdk.WrapSDKContext(ctx), &chainLinkReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
}
bz, err = querier.cdc.MarshalJSON(PostResponse)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}
func (querier PostsWasmQuerier) handlePostAttachmentsRequest(ctx sdk.Context, request json.RawMessage) (bz []byte, err error) {
var PostAttachmentsReq types.QueryPostAttachmentsRequest
err = querier.cdc.UnmarshalJSON(request, &PostAttachmentsReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
PostAttachmentsResponse, err := querier.postsKeeper.PostAttachments(sdk.WrapSDKContext(ctx), &PostAttachmentsReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
}
bz, err = querier.cdc.MarshalJSON(PostAttachmentsResponse)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}
func (querier PostsWasmQuerier) handlePollAnswersRequest(ctx sdk.Context, request json.RawMessage) (bz []byte, err error) {
var applicationReq types.QueryPollAnswersRequest
err = querier.cdc.UnmarshalJSON(request, &applicationReq)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
applicationLinkByChainIDResponse, err := querier.postsKeeper.PollAnswers(
sdk.WrapSDKContext(ctx),
&applicationReq,
)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
}
bz, err = querier.cdc.MarshalJSON(applicationLinkByChainIDResponse)
if err != nil {
return nil, errors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return bz, nil
}