Skip to content

Commit 4d524f0

Browse files
committed
feat: set metadata on state transaction
1 parent 52f760f commit 4d524f0

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

src/implementation/Client/GRPCClient/state.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { OperationType } from '../../../types/Operation.type';
66
import { IRequestMetadata } from '../../../types/RequestMetadata.type';
77
import IClientState from '../../../interfaces/Client/IClientState';
88
import { KeyValueType } from '../../../types/KeyValue.type';
9+
import { merge } from '../../../utils/Map.util';
910

1011
// https://docs.dapr.io/reference/api/state_api/
1112
export default class GRPCClientState implements IClientState {
@@ -16,7 +17,7 @@ export default class GRPCClientState implements IClientState {
1617
}
1718

1819
async save(storeName: string, stateObjects: KeyValuePairType[]): Promise<void> {
19-
const stateList = [];
20+
const stateList: StateItem[] = [];
2021

2122
for (const stateObject of stateObjects) {
2223
const si = new StateItem();
@@ -163,6 +164,9 @@ export default class GRPCClientState implements IClientState {
163164
const msgService = new ExecuteStateTransactionRequest();
164165
msgService.setStorename(storeName);
165166
msgService.setOperationsList(transactionItems);
167+
if (metadata) {
168+
merge(msgService.getMetadataMap(), metadata);
169+
}
166170

167171
return new Promise((resolve, reject) => {
168172
const client = this.client.getClient();

src/utils/Map.util.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { Map } from 'google-protobuf';
2+
import { IRequestMetadata } from '../types/RequestMetadata.type';
3+
4+
export function merge(metadataMap: Map<string, string>, metadata: IRequestMetadata): void {
5+
for (const key of Object.keys(metadata)) {
6+
metadataMap.set(key, metadata[key]);
7+
}
8+
}

test/e2e/main.grpc.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,31 @@ describe('grpc/main', () => {
301301
expect(resTransactionDelete).toEqual('');
302302
expect(resTransactionUpsert).toEqual('my-new-data-1');
303303
});
304+
305+
it('should be able to perform a transaction with metadata', async () => {
306+
await client.state.transaction('state-redis', [
307+
{
308+
operation: 'upsert',
309+
request: {
310+
key: 'key-with-metadata-1',
311+
value: 'my-new-data-with-metadata-1',
312+
},
313+
},
314+
{
315+
operation: 'delete',
316+
request: {
317+
key: 'key-with-metadata-2',
318+
},
319+
},
320+
], {
321+
trace_id: 'mock trace id here',
322+
});
323+
324+
const resTransactionDelete = await client.state.get('state-redis', 'key-with-metadata-2');
325+
const resTransactionUpsert = await client.state.get('state-redis', 'key-with-metadata-1');
326+
expect(resTransactionDelete).toEqual('');
327+
expect(resTransactionUpsert).toEqual('my-new-data-with-metadata-1');
328+
});
304329
});
305330
});
306331

0 commit comments

Comments
 (0)