arch(sprint1): add runtime provider selection strategy
This commit is contained in:
@@ -1,8 +1,23 @@
|
|||||||
import { InjectionToken, inject } from '@angular/core';
|
import { InjectionToken, inject } from '@angular/core';
|
||||||
import { BackofficeDataProvider } from './providers/backoffice-data-provider.interface';
|
import { BackofficeDataProvider } from './providers/backoffice-data-provider.interface';
|
||||||
import { MockBackofficeDataProvider } from './providers/mock-backoffice-data.provider';
|
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', {
|
export const BACKOFFICE_DATA_PROVIDER = new InjectionToken<BackofficeDataProvider>('BACKOFFICE_DATA_PROVIDER', {
|
||||||
providedIn: 'root',
|
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 { InjectionToken, inject } from '@angular/core';
|
||||||
import { ConfigProvider } from './config-provider.interface';
|
import { ConfigProvider } from './config-provider.interface';
|
||||||
import { MockBootstrapProvider } from '../bootstrap/providers/mock-bootstrap.provider';
|
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', {
|
export const CONFIG_PROVIDER = new InjectionToken<ConfigProvider>('CONFIG_PROVIDER', {
|
||||||
providedIn: 'root',
|
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