| | | 1 | | using Chronicis.Client.Services; |
| | | 2 | | |
| | | 3 | | namespace Chronicis.Client.Extensions; |
| | | 4 | | |
| | | 5 | | /// <summary> |
| | | 6 | | /// Extension methods for registering application services. |
| | | 7 | | /// </summary> |
| | | 8 | | public static class ApplicationServiceExtensions |
| | | 9 | | { |
| | | 10 | | /// <summary> |
| | | 11 | | /// Adds all Chronicis application services including API services, |
| | | 12 | | /// state services, and domain services. |
| | | 13 | | /// </summary> |
| | | 14 | | public static IServiceCollection AddChronicisApplicationServices(this IServiceCollection services) |
| | | 15 | | { |
| | | 16 | | // API Services - use the authenticated "ChronicisApi" client |
| | 0 | 17 | | services.AddChronicisApiService<IArticleApiService, ArticleApiService>(); |
| | 0 | 18 | | services.AddChronicisApiService<ISearchApiService, SearchApiService>(); |
| | 0 | 19 | | services.AddChronicisApiService<IAISummaryApiService, AISummaryApiService>(); |
| | 0 | 20 | | services.AddChronicisApiService<IWorldApiService, WorldApiService>(); |
| | 0 | 21 | | services.AddChronicisApiService<ICampaignApiService, CampaignApiService>(); |
| | 0 | 22 | | services.AddChronicisApiService<IArcApiService, ArcApiService>(); |
| | 0 | 23 | | services.AddChronicisApiService<ILinkApiService, LinkApiService>(); |
| | 0 | 24 | | services.AddChronicisApiService<IArticleExternalLinkApiService, ArticleExternalLinkApiService>(); |
| | 0 | 25 | | services.AddChronicisApiService<IExternalLinkApiService, ExternalLinkApiService>(); |
| | 0 | 26 | | services.AddChronicisApiService<IUserApiService, UserApiService>(); |
| | 0 | 27 | | services.AddChronicisApiService<ICharacterApiService, CharacterApiService>(); |
| | 0 | 28 | | services.AddChronicisApiService<IDashboardApiService, DashboardApiService>(); |
| | 0 | 29 | | services.AddChronicisApiService<IResourceProviderApiService, ResourceProviderApiService>(); |
| | | 30 | | |
| | | 31 | | // API services with special dependencies |
| | 0 | 32 | | services.AddChronicisApiServiceWithSnackbar<IQuestApiService, QuestApiService>(); |
| | 0 | 33 | | services.AddChronicisApiServiceWithJSRuntime<IExportApiService, ExportApiService>(); |
| | | 34 | | |
| | | 35 | | // Public API service (uses unauthenticated client) |
| | 0 | 36 | | services.AddScoped<IPublicApiService>(sp => |
| | 0 | 37 | | { |
| | 0 | 38 | | var factory = sp.GetRequiredService<IHttpClientFactory>(); |
| | 0 | 39 | | var logger = sp.GetRequiredService<ILogger<PublicApiService>>(); |
| | 0 | 40 | | return new PublicApiService(factory.CreateClient("ChronicisPublicApi"), logger); |
| | 0 | 41 | | }); |
| | | 42 | | |
| | | 43 | | // Health Status API service (uses unauthenticated client since health endpoints are public) |
| | 0 | 44 | | services.AddScoped<IHealthStatusApiService>(sp => |
| | 0 | 45 | | { |
| | 0 | 46 | | var factory = sp.GetRequiredService<IHttpClientFactory>(); |
| | 0 | 47 | | var logger = sp.GetRequiredService<ILogger<HealthStatusApiService>>(); |
| | 0 | 48 | | return new HealthStatusApiService(factory.CreateClient("ChronicisPublicApi"), logger); |
| | 0 | 49 | | }); |
| | | 50 | | |
| | | 51 | | // State & coordination services |
| | 0 | 52 | | services.AddScoped<ITreeStateService, TreeStateService>(); |
| | 0 | 53 | | services.AddScoped<IAuthService, AuthService>(); |
| | 0 | 54 | | services.AddScoped<IAdminAuthService, AdminAuthService>(); |
| | 0 | 55 | | services.AddScoped<IAppContextService, AppContextService>(); |
| | 0 | 56 | | services.AddScoped<IMetadataDrawerService, MetadataDrawerService>(); |
| | 0 | 57 | | services.AddScoped<IQuestDrawerService, QuestDrawerService>(); |
| | 0 | 58 | | services.AddScoped<IKeyboardShortcutService, KeyboardShortcutService>(); |
| | | 59 | | |
| | | 60 | | // Domain services |
| | 0 | 61 | | services.AddScoped<IArticleCacheService, ArticleCacheService>(); |
| | 0 | 62 | | services.AddScoped<IWikiLinkService, WikiLinkService>(); |
| | 0 | 63 | | services.AddScoped<IWikiLinkAutocompleteService, WikiLinkAutocompleteService>(); |
| | 0 | 64 | | services.AddScoped<IBreadcrumbService, BreadcrumbService>(); |
| | 0 | 65 | | services.AddScoped<IMarkdownService, MarkdownService>(); |
| | | 66 | | |
| | | 67 | | // Render definition service (loads from wwwroot static assets via base URI) |
| | 0 | 68 | | services.AddScoped<IRenderDefinitionService>(sp => |
| | 0 | 69 | | { |
| | 0 | 70 | | var navigationManager = sp.GetRequiredService<Microsoft.AspNetCore.Components.NavigationManager>(); |
| | 0 | 71 | | var http = new HttpClient { BaseAddress = new Uri(navigationManager.BaseUri) }; |
| | 0 | 72 | | var logger = sp.GetRequiredService<ILogger<RenderDefinitionService>>(); |
| | 0 | 73 | | return new RenderDefinitionService(http, logger); |
| | 0 | 74 | | }); |
| | | 75 | | |
| | 0 | 76 | | return services; |
| | | 77 | | } |
| | | 78 | | } |