@sourceloop/ctrl-plane-orchestrator-service
Version:
ARC SaaS Orchestrator service.
51 lines (48 loc) • 2.05 kB
text/typescript
import {injectable, BindingScope, inject} from '@loopback/core';
import {
DefaultEventTypes,
OrchestratorServiceBindings,
OrchestratorServiceInterface,
} from './types';
import {AnyObject} from '@loopback/repository';
import {
TenantProvisioningHandler,
TenantDeprovisioningHandler,
TenantProvisioningSuccessHandler,
TenantProvisioningFailureHandler,
TenantDeploymentHandler,
} from './';
({scope: BindingScope.TRANSIENT})
export class OrchestratorService implements OrchestratorServiceInterface {
constructor(
(OrchestratorServiceBindings.TENANT_PROVISIONING_HANDLER)
private handleTenantProvisioning: TenantProvisioningHandler,
(OrchestratorServiceBindings.TENANT_DEPROVISIONING_HANDLER)
private handleTenantDeprovisioning: TenantDeprovisioningHandler,
(OrchestratorServiceBindings.TENANT_PROVISIONING_SUCCESS_HANDLER)
private handleTenantProvisioningSuccess: TenantProvisioningSuccessHandler,
(OrchestratorServiceBindings.TENANT_PROVISIONING_FAILURE_HANDLER)
private handleTenantProvisioningFailure: TenantProvisioningFailureHandler,
(OrchestratorServiceBindings.TENANT_DEPLOYMENT_HANDLER)
private handleTenantDeployment: TenantDeploymentHandler,
) {}
async handleEvent(
eventType: DefaultEventTypes,
eventBody: AnyObject,
): Promise<void> {
switch (eventType) {
case DefaultEventTypes.TENANT_PROVISIONING:
return this.handleTenantProvisioning(eventBody);
case DefaultEventTypes.TENANT_DEPROVISIONING:
return this.handleTenantDeprovisioning(eventBody);
case DefaultEventTypes.TENANT_PROVISIONING_SUCCESS:
return this.handleTenantProvisioningSuccess(eventBody);
case DefaultEventTypes.TENANT_PROVISIONING_FAILURE:
return this.handleTenantProvisioningFailure(eventBody);
case DefaultEventTypes.TENANT_DEPLOYMENT:
return this.handleTenantDeployment(eventBody);
default:
throw new Error(`Unsupported event type: ${eventType}`);
}
}
}