1
1
import GRPCClient from './GRPCClient' ;
2
- import { DeleteStateRequest , ExecuteStateTransactionRequest , GetBulkStateRequest , GetBulkStateResponse , GetStateRequest , GetStateResponse , SaveStateRequest , TransactionalStateOperation } from '../../../proto/dapr/proto/runtime/v1/dapr_pb' ;
2
+ import { DeleteStateRequest , ExecuteStateTransactionRequest , GetBulkStateRequest , GetBulkStateResponse , GetStateRequest , GetStateResponse , QueryStateRequest , QueryStateResponse , SaveStateRequest , TransactionalStateOperation } from '../../../proto/dapr/proto/runtime/v1/dapr_pb' ;
3
3
import { Etag , StateItem , StateOptions } from '../../../proto/dapr/proto/common/v1/common_pb' ;
4
4
import { KeyValuePairType } from '../../../types/KeyValuePair.type' ;
5
5
import { OperationType } from '../../../types/Operation.type' ;
6
6
import { IRequestMetadata } from '../../../types/RequestMetadata.type' ;
7
7
import IClientState from '../../../interfaces/Client/IClientState' ;
8
8
import { KeyValueType } from '../../../types/KeyValue.type' ;
9
9
import { merge } from '../../../utils/Map.util' ;
10
+ import { StateQueryType } from '../../../types/StateQuery.type' ;
11
+ import { StateQueryResponseType } from '../../../types/StateQueryResponse.type' ;
10
12
11
13
// https://docs.dapr.io/reference/api/state_api/
12
14
export default class GRPCClientState implements IClientState {
@@ -25,7 +27,7 @@ export default class GRPCClientState implements IClientState {
25
27
si . setValue ( Buffer . from ( typeof stateObject . value === "object" ? JSON . stringify ( stateObject . value ) : stateObject . value . toString ( ) , "utf-8" ) ) ;
26
28
stateList . push ( si ) ;
27
29
}
28
-
30
+
29
31
const msgService = new SaveStateRequest ( ) ;
30
32
msgService . setStoreName ( storeName ) ;
31
33
msgService . setStatesList ( stateList ) ;
@@ -48,7 +50,7 @@ export default class GRPCClientState implements IClientState {
48
50
msgService . setStoreName ( storeName ) ;
49
51
msgService . setKey ( key )
50
52
51
-
53
+
52
54
// @todo : https://docs.dapr.io/reference/api/state_api/#optional-behaviors
53
55
// msgService.setConsistency()
54
56
@@ -96,7 +98,7 @@ export default class GRPCClientState implements IClientState {
96
98
let data : string ;
97
99
try {
98
100
data = JSON . parse ( resDataStr ) ;
99
- } catch ( e ) {
101
+ } catch ( e ) {
100
102
data = resDataStr ;
101
103
}
102
104
return {
@@ -180,4 +182,33 @@ export default class GRPCClientState implements IClientState {
180
182
} ) ;
181
183
} ) ;
182
184
}
185
+
186
+ async query ( storeName : string , query : StateQueryType ) : Promise < StateQueryResponseType > {
187
+ const msgService = new QueryStateRequest ( ) ;
188
+ msgService . setStoreName ( storeName ) ;
189
+ msgService . setQuery ( JSON . stringify ( query ) )
190
+
191
+ return new Promise ( ( resolve , reject ) => {
192
+ const client = this . client . getClient ( ) ;
193
+ client . queryStateAlpha1 ( msgService , ( err , res : QueryStateResponse ) => {
194
+ if ( err ) {
195
+ return reject ( err ) ;
196
+ }
197
+
198
+ // https://docs.dapr.io/reference/api/state_api/#response-body
199
+ // map the res from gRPC
200
+ let resMapped : StateQueryResponseType = {
201
+ results : res . getResultsList ( ) . map ( ( i ) => ( {
202
+ key : i . getKey ( ) ,
203
+ data : i . getData ( ) ,
204
+ etag : i . getEtag ( ) ,
205
+ error : i . getError ( ) ,
206
+ } ) ) ,
207
+ token : res . getToken ( )
208
+ } ;
209
+
210
+ return resolve ( resMapped ) ;
211
+ } ) ;
212
+ } ) ;
213
+ }
183
214
}
0 commit comments