Skip to content

Commit fd5aacf

Browse files
authored
Merge pull request #122 from dolittle/implement-key-selectors
Implement key selectors
2 parents b8e0e60 + 190c5ba commit fd5aacf

File tree

20 files changed

+125
-21
lines changed

20 files changed

+125
-21
lines changed

Source/artifacts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"@dolittle/concepts": "6.0.0",
4848
"@dolittle/rudiments": "6.0.0",
4949
"@dolittle/types": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0"
50+
"@dolittle/runtime.contracts": "6.7.0"
5151
},
5252
"devDependencies": {
5353
"@types/is-natural-number": "^4.0.0"

Source/embeddings/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
},
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
48-
"@dolittle/contracts": "6.6.0",
48+
"@dolittle/contracts": "6.7.0",
4949
"@dolittle/rudiments": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0",
50+
"@dolittle/runtime.contracts": "6.7.0",
5151
"@dolittle/sdk.artifacts": "23.0.0",
5252
"@dolittle/sdk.common": "23.0.0",
5353
"@dolittle/sdk.dependencyinversion": "23.0.0",

Source/eventHorizon/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
4848
"@dolittle/rudiments": "6.0.0",
49-
"@dolittle/runtime.contracts": "6.6.0",
49+
"@dolittle/runtime.contracts": "6.7.0",
5050
"@dolittle/sdk.events": "23.0.0",
5151
"@dolittle/sdk.execution": "23.0.0",
5252
"@dolittle/sdk.protobuf": "23.0.0",

Source/events.filtering/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
},
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
48-
"@dolittle/contracts": "6.6.0",
48+
"@dolittle/contracts": "6.7.0",
4949
"@dolittle/rudiments": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0",
50+
"@dolittle/runtime.contracts": "6.7.0",
5151
"@dolittle/sdk.common": "23.0.0",
5252
"@dolittle/sdk.dependencyinversion": "23.0.0",
5353
"@dolittle/sdk.events": "23.0.0",

Source/events.handling/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
},
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
48-
"@dolittle/contracts": "6.6.0",
48+
"@dolittle/contracts": "6.7.0",
4949
"@dolittle/rudiments": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0",
50+
"@dolittle/runtime.contracts": "6.7.0",
5151
"@dolittle/sdk.artifacts": "23.0.0",
5252
"@dolittle/sdk.common": "23.0.0",
5353
"@dolittle/sdk.dependencyinversion": "23.0.0",

Source/events.processing/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
},
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
48-
"@dolittle/contracts": "6.6.0",
48+
"@dolittle/contracts": "6.7.0",
4949
"@dolittle/rudiments": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0",
50+
"@dolittle/runtime.contracts": "6.7.0",
5151
"@dolittle/sdk.common": "23.0.0",
5252
"@dolittle/sdk.dependencyinversion": "23.0.0",
5353
"@dolittle/sdk.execution": "23.0.0",

Source/events/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
},
4646
"dependencies": {
4747
"@dolittle/concepts": "6.0.0",
48-
"@dolittle/contracts": "6.6.0",
48+
"@dolittle/contracts": "6.7.0",
4949
"@dolittle/rudiments": "6.0.0",
50-
"@dolittle/runtime.contracts": "6.6.0",
50+
"@dolittle/runtime.contracts": "6.7.0",
5151
"@dolittle/sdk.artifacts": "23.0.0",
5252
"@dolittle/sdk.execution": "23.0.0",
5353
"@dolittle/sdk.protobuf": "23.0.0",

Source/projections/Builders/KeySelectorBuilder.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
// Copyright (c) Dolittle. All rights reserved.
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

4+
import { EventOccurredKeySelector } from '../EventOccurredKeySelector';
45
import { EventPropertyKeySelector } from '../EventPropertyKeySelector';
56
import { EventSourceIdKeySelector } from '../EventSourceIdKeySelector';
7+
import { Key } from '../Key';
8+
import { OccurredFormat } from '../OccurredFormat';
69
import { PartitionIdKeySelector } from '../PartitionIdKeySelector';
10+
import { StaticKeySelector } from '../StaticKeySelector';
711

812
/**
913
* Represents a builder for building {@link KeySelector}.
@@ -34,4 +38,23 @@ export class KeySelectorBuilder<T = any> {
3438
keyFromProperty(property: keyof T): EventPropertyKeySelector {
3539
return new EventPropertyKeySelector(property as string);
3640
}
41+
42+
/**
43+
* Sets a static key as projection key.
44+
* @param {string | Key} key - The property to use as key.
45+
* @returns {StaticKeySelector} A key selector.
46+
*/
47+
staticKey(key: string | Key): StaticKeySelector {
48+
return new StaticKeySelector(key);
49+
}
50+
51+
/**
52+
* Select projection key from the given format of when an event occurred.
53+
* @param {string | OccurredFormat} occurredFormat - The occurred format.
54+
* @returns {StaticKeySelector} A key selector.
55+
*/
56+
keyFromEventOccurred(occurredFormat: string | OccurredFormat): EventOccurredKeySelector {
57+
return new EventOccurredKeySelector(occurredFormat);
58+
}
59+
3760
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) Dolittle. All rights reserved.
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
import { OccurredFormat } from './OccurredFormat';
5+
6+
/**
7+
* Represents an event occurred key selector.
8+
*/
9+
export class EventOccurredKeySelector {
10+
readonly occurredFormat: OccurredFormat;
11+
12+
/**
13+
* Initializes a new instance of the {@link EventOccurredKeySelector} class.
14+
* @param {OccurredFormat | string} occurredFormat - The occurred format to use as format for getting key from event occurred metadata.
15+
*/
16+
constructor(occurredFormat: OccurredFormat | string) {
17+
this.occurredFormat = OccurredFormat.from(occurredFormat);
18+
}
19+
}

Source/projections/Internal/ProjectionProcessor.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { ProcessorFailure, RetryProcessingState } from '@dolittle/runtime.contra
1818
import { ProjectionsClient } from '@dolittle/runtime.contracts/Events.Processing/Projections_grpc_pb';
1919
import {
2020
EventPropertyKeySelector as ProtobufEventPropertyKeySelector, EventSourceIdKeySelector as ProtobufEventSourceIdKeySelector, PartitionIdKeySelector as ProtobufPartitionIdKeySelector, ProjectionClientToRuntimeMessage, ProjectionCopies, ProjectionCopyToMongoDB, ProjectionDeleteResponse, ProjectionEventSelector, ProjectionRegistrationRequest,
21+
StaticKeySelector as ProtobufStaticKeySelector, EventOccurredKeySelector as ProtobufEventOccurredKeySelector,
2122
ProjectionRegistrationResponse, ProjectionReplaceResponse, ProjectionRequest,
2223
ProjectionResponse, ProjectionRuntimeToClientMessage
2324
} from '@dolittle/runtime.contracts/Events.Processing/Projections_pb';
@@ -36,6 +37,8 @@ import { UnknownKeySelectorType } from '../UnknownKeySelectorType';
3637
import { Conversion } from '../Copies/MongoDB/Conversion';
3738
import { UnknownMongoDBConversion } from '../Copies/MongoDB/UnknownMongoDBConversion';
3839
import { PropertyConversion } from '../Copies/MongoDB/PropertyConversion';
40+
import { StaticKeySelector } from '../StaticKeySelector';
41+
import { EventOccurredKeySelector } from '../EventOccurredKeySelector';
3942

4043
/**
4144
* Represents an implementation of {@link Internal.EventProcessor} for {@link Projection}.
@@ -82,6 +85,14 @@ export class ProjectionProcessor<T> extends Internal.EventProcessor<ProjectionId
8285
protobufSelector.setEventsourcekeyselector(new ProtobufEventSourceIdKeySelector());
8386
} else if (selector instanceof PartitionIdKeySelector) {
8487
protobufSelector.setPartitionkeyselector(new ProtobufPartitionIdKeySelector());
88+
} else if (selector instanceof StaticKeySelector) {
89+
const staticKeySelector = new ProtobufStaticKeySelector();
90+
staticKeySelector.setStatickey(selector.staticKey.value);
91+
protobufSelector.setStatickeyselector(staticKeySelector);
92+
} else if (selector instanceof EventOccurredKeySelector) {
93+
const eventOccurredKeySelector = new ProtobufEventOccurredKeySelector();
94+
eventOccurredKeySelector.setFormat(selector.occurredFormat.value);
95+
protobufSelector.setEventoccurredkeyselector(eventOccurredKeySelector);
8596
} else {
8697
throw new UnknownKeySelectorType(selector);
8798
}

0 commit comments

Comments
 (0)