Skip to content

Commit b6a6d95

Browse files
authored
Merge pull request #34 from dolittle/fix-api
Fix public api
2 parents 1e502c4 + 8772aab commit b6a6d95

13 files changed

Lines changed: 106 additions & 54 deletions

Samples/EventHorizon/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { PartitionId } from '@dolittle/sdk.events';
99

1010
const client = Client
1111
.forMicroservice('a14bb24e-51f3-4d83-9eba-44c4cffe6bb9')
12-
.connectToRuntime('localhost', 50055)
12+
.withRuntimeOn('localhost', 50055)
1313
.withEventTypes(eventTypes =>
1414
eventTypes.register(MyEvent))
1515
.withEventHandlers(eventHandlers =>

Source/artifacts/EventTypesBuilder.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import { Constructor } from '@dolittle/types';
55
import { Guid } from '@dolittle/rudiments';
6+
67
import { Generation } from './Generation';
78
import { EventType } from './EventType';
89
import { IEventTypes } from './IEventTypes';

Source/eventHorizon/SubscriptionBuilderForConsumerScope.ts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@
44

55
import { StreamId, PartitionId, ScopeId } from '@dolittle/sdk.events';
66
import { MicroserviceId, TenantId } from '@dolittle/sdk.execution';
7+
import { Observable } from 'rxjs';
8+
import { filter } from 'rxjs/operators';
79

810
import { Subscription } from './Subscription';
9-
import { SubscriptionCallbacks, SubscriptionCompleted, SubscriptionFailed, SubscriptionSucceeded } from './SubscriptionCallbacks';
11+
import { SubscriptionCallbackArguments, SubscriptionCallbacks, SubscriptionCompleted, SubscriptionFailed, SubscriptionSucceeded } from './SubscriptionCallbacks';
1012

1113
/**
1214
* Represents the builder for building subscriptions on a tenant.
1315
*/
1416
export class SubscriptionBuilderForConsumerScope {
17+
private readonly _callbacks: ((subscriptionCallback: SubscriptionCallbacks) => void)[] = [];
1518

16-
private readonly _callbacks: SubscriptionCallbacks = new SubscriptionCallbacks();
1719
/**
1820
* Initializes a new instance of {@link SubscriptionBuilderForConsumerScope}.
1921
* @param {MicroserviceId} _producerMicroserviceId The microservice the subscriptions are for.
20-
* @param {Observable<SubscriptionCallbackArguments>} responsesSource The source of responses.
2122
*/
2223
constructor(
2324
private readonly _producerMicroserviceId: MicroserviceId,
@@ -34,7 +35,7 @@ export class SubscriptionBuilderForConsumerScope {
3435
* @summary The callback will be called on each subscription.
3536
*/
3637
onCompleted(completed: SubscriptionCompleted): SubscriptionBuilderForConsumerScope {
37-
this._callbacks.onCompleted(completed);
38+
this._callbacks.push(subscriptionCallbacks => subscriptionCallbacks.onCompleted(completed));
3839
return this;
3940
}
4041

@@ -45,7 +46,7 @@ export class SubscriptionBuilderForConsumerScope {
4546
* @summary The callback will be called on each subscription.
4647
*/
4748
onSuccess(succeeded: SubscriptionSucceeded): SubscriptionBuilderForConsumerScope {
48-
this._callbacks.onSucceeded(succeeded);
49+
this._callbacks.push(subscriptionCallbacks => subscriptionCallbacks.onSucceeded(succeeded));
4950
return this;
5051
}
5152

@@ -56,7 +57,7 @@ export class SubscriptionBuilderForConsumerScope {
5657
* @summary The callback will be called on each subscription.
5758
*/
5859
onFailure(failed: SubscriptionFailed): SubscriptionBuilderForConsumerScope {
59-
this._callbacks.onFailed(failed);
60+
this._callbacks.push(subscriptionCallbacks => subscriptionCallbacks.onFailed(failed));
6061
return this;
6162
}
6263

@@ -65,7 +66,23 @@ export class SubscriptionBuilderForConsumerScope {
6566
* @param {Observable<SubscriptionCallbackArguments} callbackArgumentsSource The observable source of responses.
6667
* @returns {Subscription}
6768
*/
68-
build(): Subscription {
69-
return new Subscription(this._consumerScopeId, this._producerMicroserviceId, this._producerTenantId, this._producerStreamId, this._producerPartitionId, this._callbacks);
69+
build(callbackArgumentsSource: Observable<SubscriptionCallbackArguments>): Subscription {
70+
const subscriptionCallbacks = new SubscriptionCallbacks(
71+
callbackArgumentsSource.pipe(filter(_ =>
72+
_.subscription.microservice.equals(this._producerMicroserviceId) &&
73+
_.subscription.partition.equals(this._producerPartitionId) &&
74+
_.subscription.scope.equals(this._consumerScopeId) &&
75+
_.subscription.stream.equals(this._producerStreamId) &&
76+
_.subscription.tenant.equals(this._producerTenantId))));
77+
for (const callback of this._callbacks) {
78+
callback(subscriptionCallbacks);
79+
}
80+
return new Subscription(
81+
this._consumerScopeId,
82+
this._producerMicroserviceId,
83+
this._producerTenantId,
84+
this._producerStreamId,
85+
this._producerPartitionId,
86+
subscriptionCallbacks);
7087
}
7188
}

Source/eventHorizon/SubscriptionBuilderForProducerMicroservice.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ import { Subscription } from './Subscription';
99
import { SubscriptionBuilderForProducerTenant } from './SubscriptionBuilderForProducerTenant';
1010
import { SubscriptionDefinitionIncomplete } from './SubscriptionDefinitionIncomplete';
1111
import { SubscriptionBuilderMethodAlreadyCalled } from './SubscriptionBuilderMethodAlreadyCalled';
12+
import { SubscriptionCallbackArguments } from './SubscriptionCallbacks';
13+
import { Observable } from 'rxjs';
1214

1315
/**
1416
* Represents the builder for building subscriptions on a tenant.
1517
*/
1618
export class SubscriptionBuilderForProducerMicroservice {
17-
private _producerTenant?: TenantId;
19+
private _producerTenantId?: TenantId;
1820
private _builder?: SubscriptionBuilderForProducerTenant;
1921

22+
2023
/**
2124
* Initializes a new instance of {@link SubscriptionBuilderForProducerMicroservice}.
2225
* @param {MicroserviceId} _producerMicroserviceId The microservice the subscriptions are for.
@@ -27,12 +30,12 @@ export class SubscriptionBuilderForProducerMicroservice {
2730

2831
/**
2932
* Specifies from which tenant we should get events from in the other microservice.
30-
* @param {Guid | string} tenant Tenant for the subscription.
33+
* @param {Guid | string} tenantId Tenant for the subscription.
3134
*/
32-
fromProducerTenant(tenant: Guid | string): SubscriptionBuilderForProducerTenant {
35+
fromProducerTenant(tenantId: Guid | string): SubscriptionBuilderForProducerTenant {
3336
this.throwIfProducerTenantIsAlreadyDefined();
34-
this._producerTenant = TenantId.from(tenant);
35-
this._builder = new SubscriptionBuilderForProducerTenant(this._producerMicroserviceId, this._producerTenant);
37+
this._producerTenantId = TenantId.from(tenantId);
38+
this._builder = new SubscriptionBuilderForProducerTenant(this._producerMicroserviceId, this._producerTenantId);
3639
return this._builder;
3740
}
3841

@@ -41,18 +44,18 @@ export class SubscriptionBuilderForProducerMicroservice {
4144
* @param {Observable<SubscriptionCallbackArguments} callbackArgumentsSource The observable source of responses.
4245
* @returns {Subscription}
4346
*/
44-
build(): Subscription {
47+
build(callbackArgumentsSource: Observable<SubscriptionCallbackArguments>): Subscription {
4548
this.throwIfProducerTenantIsNotDefined();
46-
return this._builder!.build();
49+
return this._builder!.build(callbackArgumentsSource);
4750
}
4851

4952
private throwIfProducerTenantIsAlreadyDefined() {
50-
if (this._producerTenant) {
53+
if (this._producerTenantId) {
5154
throw new SubscriptionBuilderMethodAlreadyCalled('fromProducerTenant()');
5255
}
5356
}
5457
private throwIfProducerTenantIsNotDefined() {
55-
if (!this._producerTenant) {
58+
if (!this._producerTenantId) {
5659
throw new SubscriptionDefinitionIncomplete('Producer Tenant', 'Call fromProducerTenant()');
5760
}
5861
}

Source/eventHorizon/SubscriptionBuilderForProducerPartition.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import { Subscription } from './Subscription';
1010
import { SubscriptionBuilderMethodAlreadyCalled } from './SubscriptionBuilderMethodAlreadyCalled';
1111
import { SubscriptionDefinitionIncomplete } from './SubscriptionDefinitionIncomplete';
1212
import { SubscriptionBuilderForConsumerScope } from './SubscriptionBuilderForConsumerScope';
13+
import { SubscriptionCallbackArguments } from './SubscriptionCallbacks';
14+
import { Observable } from 'rxjs';
1315

1416
/**
1517
* Represents the builder for building subscriptions on a tenant.
1618
*/
1719
export class SubscriptionBuilderForProducerPartition {
18-
private _consumerScope?: ScopeId;
20+
private _consumerScopeId?: ScopeId;
1921
private _builder?: SubscriptionBuilderForConsumerScope;
2022

2123
/**
@@ -32,12 +34,17 @@ export class SubscriptionBuilderForProducerPartition {
3234

3335
/**
3436
* Sets the producer stream to subscribe to events from.
35-
* @param {Guid | string} consumerScope Stream to subscribe to events from.
37+
* @param {Guid | string} scopeId Stream to subscribe to events from.
3638
*/
37-
toScope(consumerScope: Guid | string): SubscriptionBuilderForConsumerScope {
39+
toScope(scopeId: Guid | string): SubscriptionBuilderForConsumerScope {
3840
this.throwIfConsumerScopeIsAlreadyDefined();
39-
this._consumerScope = ScopeId.from(consumerScope);
40-
this._builder = new SubscriptionBuilderForConsumerScope(this._producerMicroserviceId, this._producerTenantId, this._producerStreamId, this._producerPartitionId, this._consumerScope);
41+
this._consumerScopeId = ScopeId.from(scopeId);
42+
this._builder = new SubscriptionBuilderForConsumerScope(
43+
this._producerMicroserviceId,
44+
this._producerTenantId,
45+
this._producerStreamId,
46+
this._producerPartitionId,
47+
this._consumerScopeId);
4148
return this._builder;
4249
}
4350

@@ -46,18 +53,18 @@ export class SubscriptionBuilderForProducerPartition {
4653
* @param {Observable<SubscriptionCallbackArguments} callbackArgumentsSource The observable source of responses.
4754
* @returns {Subscription}
4855
*/
49-
build(): Subscription {
56+
build(callbackArgumentsSource: Observable<SubscriptionCallbackArguments>): Subscription {
5057
this.throwIfConsumerScopeIsNotDefined();
51-
return this._builder!.build();
58+
return this._builder!.build(callbackArgumentsSource);
5259
}
5360

5461
private throwIfConsumerScopeIsAlreadyDefined() {
55-
if (this._consumerScope) {
62+
if (this._consumerScopeId) {
5663
throw new SubscriptionBuilderMethodAlreadyCalled('toScope()');
5764
}
5865
}
5966
private throwIfConsumerScopeIsNotDefined() {
60-
if (!this._consumerScope) {
67+
if (!this._consumerScopeId) {
6168
throw new SubscriptionDefinitionIncomplete('Scope', 'Call toScope() with a non-default scope');
6269
}
6370
}

Source/eventHorizon/SubscriptionBuilderForProducerStream.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { Subscription } from './Subscription';
1010
import { SubscriptionBuilderMethodAlreadyCalled } from './SubscriptionBuilderMethodAlreadyCalled';
1111
import { SubscriptionDefinitionIncomplete } from './SubscriptionDefinitionIncomplete';
1212
import { SubscriptionBuilderForProducerPartition } from './SubscriptionBuilderForProducerPartition';
13+
import { Observable } from 'rxjs';
14+
import { SubscriptionCallbackArguments } from './SubscriptionCallbacks';
1315

1416
/**
1517
* Represents the builder for building subscriptions on a tenant.
@@ -36,7 +38,11 @@ export class SubscriptionBuilderForProducerStream {
3638
fromProducerPartition(partitionId: Guid | string): SubscriptionBuilderForProducerPartition {
3739
this.throwIfProducerPartitionIsAlreadyDefined();
3840
this._producerPartitionId = PartitionId.from(partitionId);
39-
this._builder = new SubscriptionBuilderForProducerPartition(this._producerMicroserviceId, this._producerTenantId, this._producerStreamId, this._producerPartitionId);
41+
this._builder = new SubscriptionBuilderForProducerPartition(
42+
this._producerMicroserviceId,
43+
this._producerTenantId,
44+
this._producerStreamId,
45+
this._producerPartitionId);
4046
return this._builder;
4147
}
4248

@@ -45,9 +51,9 @@ export class SubscriptionBuilderForProducerStream {
4551
* @param {Observable<SubscriptionCallbackArguments} callbackArgumentsSource The observable source of responses.
4652
* @returns {Subscription}
4753
*/
48-
build(): Subscription {
54+
build(callbackArgumentsSource: Observable<SubscriptionCallbackArguments>): Subscription {
4955
this.throwIfProducerPartitionIsNotDefined();
50-
return this._builder!.build();
56+
return this._builder!.build(callbackArgumentsSource);
5157
}
5258

5359
private throwIfProducerPartitionIsAlreadyDefined() {

Source/eventHorizon/SubscriptionBuilderForProducerTenant.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { Subscription } from './Subscription';
1010
import { SubscriptionBuilderMethodAlreadyCalled } from './SubscriptionBuilderMethodAlreadyCalled';
1111
import { SubscriptionDefinitionIncomplete } from './SubscriptionDefinitionIncomplete';
1212
import { SubscriptionBuilderForProducerStream } from './SubscriptionBuilderForProducerStream';
13+
import { Observable } from 'rxjs';
14+
import { SubscriptionCallbackArguments} from './SubscriptionCallbacks';
1315

1416
/**
1517
* Represents the builder for building subscriptions on a tenant.
@@ -35,7 +37,10 @@ export class SubscriptionBuilderForProducerTenant {
3537
fromProducerStream(streamId: Guid | string): SubscriptionBuilderForProducerStream {
3638
this.throwIfProducerStreamIsAlreadyDefined();
3739
this._producerStreamId = StreamId.from(streamId);
38-
this._builder = new SubscriptionBuilderForProducerStream(this._producerMicroserviceId, this._producerTenantId, this._producerStreamId);
40+
this._builder = new SubscriptionBuilderForProducerStream(
41+
this._producerMicroserviceId,
42+
this._producerTenantId,
43+
this._producerStreamId);
3944
return this._builder;
4045
}
4146

@@ -44,9 +49,9 @@ export class SubscriptionBuilderForProducerTenant {
4449
* @param {Observable<SubscriptionCallbackArguments} callbackArgumentsSource The observable source of responses.
4550
* @returns {Subscription}
4651
*/
47-
build(): Subscription {
52+
build(callbackArgumentsSource: Observable<SubscriptionCallbackArguments>): Subscription {
4853
this.throwIfProducerStreamIsNotDefined();
49-
return this._builder!.build();
54+
return this._builder!.build(callbackArgumentsSource);
5055
}
5156

5257
private throwIfProducerStreamIsAlreadyDefined() {

Source/eventHorizon/SubscriptionsBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ export class SubscriptionsBuilder {
2525

2626
/**
2727
* Configure subscriptions for a tenant in our microservice.
28-
* @param {Guid | string} tenant The tenant in our microservice.
28+
* @param {Guid | string} tenantId The tenant in our microservice.
2929
* @param {TenantWithSubscriptionsBuilderCallback} callback The subscriptions builder callback.
3030
* @returns {SubscriptionsBuilder}
3131
* @summary Two microservices does not need to be aligned on tenancy. This allows for that purpose.
3232
*/
33-
forTenant(tenant: Guid | string, callback: (builder: SubscriptionsBuilderForConsumerTenant) => void): SubscriptionsBuilder {
34-
const builder = new SubscriptionsBuilderForConsumerTenant(TenantId.from(tenant), this._callbacks.responses);
33+
forTenant(tenantId: Guid | string, callback: (builder: SubscriptionsBuilderForConsumerTenant) => void): SubscriptionsBuilder {
34+
const builder = new SubscriptionsBuilderForConsumerTenant(TenantId.from(tenantId), this._callbacks.responses);
3535
callback(builder);
3636
this._tenantSubscriptionsBuilders.push(builder);
3737
return this;

Source/eventHorizon/SubscriptionsBuilderForConsumerTenant.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { Guid } from '@dolittle/rudiments';
1313
* Represents the builder of {@link TenantSubscriptions}.
1414
*/
1515
export class SubscriptionsBuilderForConsumerTenant {
16-
private readonly _callbacks: SubscriptionCallbacks = new SubscriptionCallbacks();
16+
private readonly _callbacks: SubscriptionCallbacks;
1717
readonly _subscriptionBuilders: SubscriptionBuilderForProducerMicroservice[] = [];
1818

1919
/**
@@ -22,16 +22,18 @@ export class SubscriptionsBuilderForConsumerTenant {
2222
* @param {Observable<SubscriptionCallbackArguments>} responsesSource The source of responses.
2323
*/
2424
constructor(private _consumerTenantId: TenantId, responsesSource: Observable<SubscriptionCallbackArguments>) {
25-
this._callbacks = new SubscriptionCallbacks(responsesSource.pipe(filter(_ => _.consumerTenant.toString() === _consumerTenantId.toString())));
25+
this._callbacks = new SubscriptionCallbacks(
26+
responsesSource.pipe(filter(_ =>
27+
_.consumerTenant.toString() === _consumerTenantId.toString())));
2628
}
2729

2830
/**
2931
* Sets the producer microservice to subscribe to events from.
30-
* @param {Guid | string} microservice Microservice to build for.
32+
* @param {Guid | string} microserviceId Microservice to build for.
3133
* @returns {SubscriptionBuilderForProducerMicroservice}
3234
*/
33-
fromProducerMicroservice(microservice: Guid | string): SubscriptionBuilderForProducerMicroservice {
34-
const builder = new SubscriptionBuilderForProducerMicroservice(MicroserviceId.from(microservice));
35+
fromProducerMicroservice(microserviceId: Guid | string): SubscriptionBuilderForProducerMicroservice {
36+
const builder = new SubscriptionBuilderForProducerMicroservice(MicroserviceId.from(microserviceId));
3537
this._subscriptionBuilders.push(builder);
3638
return builder;
3739
}
@@ -74,7 +76,7 @@ export class SubscriptionsBuilderForConsumerTenant {
7476
* @returns {TenantWithSubscriptions}
7577
*/
7678
build(): TenantWithSubscriptions {
77-
const subscriptions = this._subscriptionBuilders.map(_ => _.build());
79+
const subscriptions = this._subscriptionBuilders.map(_ => _.build(this._callbacks.responses));
7880
return new TenantWithSubscriptions(
7981
this._consumerTenantId,
8082
subscriptions,

Source/events.handling/Builder/EventHandlersBuilder.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ export class EventHandlersBuilder {
3232
* @param {EventHandlerBuilderCallback} callback Callback for building out the event handler.
3333
*/
3434
createEventHandler(eventHandlerId: Guid | string, callback: EventHandlerBuilderCallback): EventHandlersBuilder {
35-
const id = EventHandlerId.from(eventHandlerId);
36-
const builder = new EventHandlerBuilder(id);
35+
const builder = new EventHandlerBuilder(EventHandlerId.from(eventHandlerId));
3736
callback(builder);
3837
this._eventHandlerBuilders.push(builder);
3938
return this;

0 commit comments

Comments
 (0)