arch(sprint1): add runtime provider selection strategy

This commit is contained in:
sdarbinyan
2026-07-03 02:08:51 +04:00
parent 8d47920fa3
commit 6dfe1291ae
3 changed files with 55 additions and 2 deletions

View File

@@ -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;
}
}
}); });

View File

@@ -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;
}
}
}); });

View 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';
}
}