arch(sprint1): add runtime provider selection strategy
This commit is contained in:
@@ -1,8 +1,23 @@
|
||||
import { InjectionToken, inject } from '@angular/core';
|
||||
import { BackofficeDataProvider } from './providers/backoffice-data-provider.interface';
|
||||
import { MockBackofficeDataProvider } from './providers/mock-backoffice-data.provider';
|
||||
import { ApiBackofficeDataProvider } from './providers/api-backoffice-data.provider';
|
||||
import { RuntimeProviderStrategyService } from '../providers/runtime-provider-strategy.service';
|
||||
|
||||
export const BACKOFFICE_DATA_PROVIDER = new InjectionToken<BackofficeDataProvider>('BACKOFFICE_DATA_PROVIDER', {
|
||||
providedIn: 'root',
|
||||
factory: () => inject(MockBackofficeDataProvider)
|
||||
factory: () => {
|
||||
const strategy = inject(RuntimeProviderStrategyService);
|
||||
const mockProvider = inject(MockBackofficeDataProvider);
|
||||
const apiProvider = inject(ApiBackofficeDataProvider);
|
||||
|
||||
switch (strategy.getBackofficeProviderMode()) {
|
||||
case 'mock':
|
||||
return mockProvider;
|
||||
case 'remote-config':
|
||||
case 'api':
|
||||
default:
|
||||
return apiProvider;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,8 +1,23 @@
|
||||
import { InjectionToken, inject } from '@angular/core';
|
||||
import { ConfigProvider } from './config-provider.interface';
|
||||
import { MockBootstrapProvider } from '../bootstrap/providers/mock-bootstrap.provider';
|
||||
import { ApiBootstrapProvider } from '../bootstrap/providers/api-bootstrap.provider';
|
||||
import { RuntimeProviderStrategyService } from '../providers/runtime-provider-strategy.service';
|
||||
|
||||
export const CONFIG_PROVIDER = new InjectionToken<ConfigProvider>('CONFIG_PROVIDER', {
|
||||
providedIn: 'root',
|
||||
factory: () => inject(MockBootstrapProvider)
|
||||
factory: () => {
|
||||
const strategy = inject(RuntimeProviderStrategyService);
|
||||
const mockProvider = inject(MockBootstrapProvider);
|
||||
const apiProvider = inject(ApiBootstrapProvider);
|
||||
|
||||
switch (strategy.getBootstrapProviderMode()) {
|
||||
case 'mock':
|
||||
return mockProvider;
|
||||
case 'remote-config':
|
||||
case 'api':
|
||||
default:
|
||||
return apiProvider;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
23
src/app/core/providers/runtime-provider-strategy.service.ts
Normal file
23
src/app/core/providers/runtime-provider-strategy.service.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { environment } from '../../../environments/environment';
|
||||
|
||||
export type RuntimeProviderMode = 'mock' | 'api' | 'remote-config';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class RuntimeProviderStrategyService {
|
||||
getBootstrapProviderMode(): RuntimeProviderMode {
|
||||
if (environment.useMockData) {
|
||||
return 'mock';
|
||||
}
|
||||
|
||||
return 'api';
|
||||
}
|
||||
|
||||
getBackofficeProviderMode(): RuntimeProviderMode {
|
||||
if (environment.useMockData) {
|
||||
return 'mock';
|
||||
}
|
||||
|
||||
return 'api';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user