feat(signals,events)!: migrate signals to use events service

+ allow defining event paylod in events service

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2024-02-28 08:12:12 +02:00
parent 1d1c8a79fb
commit daf85dc4ab
16 changed files with 72 additions and 64 deletions
@@ -16,12 +16,12 @@
import { DefaultSignalService } from './DefaultSignalService';
describe('DefaultSignalService', () => {
const mockEventBroker = {
const mockEvents = {
publish: jest.fn(),
subscribe: jest.fn(),
};
const service = DefaultSignalService.create({ eventBroker: mockEventBroker });
const service = DefaultSignalService.create({ events: mockEvents });
it('should publish signal', () => {
const signal = {
@@ -30,7 +30,7 @@ describe('DefaultSignalService', () => {
message: { msg: 'hello world' },
};
service.publish(signal);
expect(mockEventBroker.publish).toHaveBeenCalledWith({
expect(mockEvents.publish).toHaveBeenCalledWith({
topic: 'signals',
eventPayload: signal,
});
@@ -13,22 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { EventBroker } from '@backstage/plugin-events-node';
import { EventsService } from '@backstage/plugin-events-node';
import { SignalPayload, SignalServiceOptions } from './types';
import { SignalService } from './SignalService';
import { JsonObject } from '@backstage/types';
/** @public */
export class DefaultSignalService implements SignalService {
// TODO: Remove this to be optional when events-backend has eventBroker as service
private eventBroker?: EventBroker;
private events: EventsService;
static create(options: SignalServiceOptions) {
return new DefaultSignalService(options);
}
private constructor(options: SignalServiceOptions) {
({ eventBroker: this.eventBroker } = options);
({ events: this.events } = options);
}
/**
@@ -38,7 +37,7 @@ export class DefaultSignalService implements SignalService {
async publish<TMessage extends JsonObject = JsonObject>(
signal: SignalPayload<TMessage>,
) {
await this.eventBroker?.publish({
await this.events.publish({
topic: 'signals',
eventPayload: signal,
});
+4 -4
View File
@@ -19,6 +19,7 @@ import {
} from '@backstage/backend-plugin-api';
import { DefaultSignalService } from './DefaultSignalService';
import { SignalService } from './SignalService';
import { eventsServiceRef } from '@backstage/plugin-events-node';
/** @public */
export const signalService = createServiceRef<SignalService>({
@@ -28,11 +29,10 @@ export const signalService = createServiceRef<SignalService>({
createServiceFactory({
service,
deps: {
// TODO: EventBroker. It is optional for now but it's actually required so waiting for the new backend system
// for the events-backend for this to work.
events: eventsServiceRef,
},
factory({}) {
return DefaultSignalService.create({});
factory({ events }) {
return DefaultSignalService.create({ events });
},
}),
});
+2 -2
View File
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { EventBroker } from '@backstage/plugin-events-node';
import { EventsService } from '@backstage/plugin-events-node';
import { JsonObject } from '@backstage/types';
/**
* @public
*/
export type SignalServiceOptions = {
eventBroker?: EventBroker;
events: EventsService;
};
/** @public */