Skip to content

feat(config): migrate to runtime config.json loading#2

Merged
Kaiohz merged 3 commits intomainfrom
BRIC-5/runtime-config-loading
Apr 9, 2026
Merged

feat(config): migrate to runtime config.json loading#2
Kaiohz merged 3 commits intomainfrom
BRIC-5/runtime-config-loading

Conversation

@Kaiohz
Copy link
Copy Markdown
Contributor

@Kaiohz Kaiohz commented Apr 6, 2026

Summary

Migrates composable-ui from build-time environment variables to runtime config.json loading, following the same pattern as pickpro-front.

Changes

Domain Layer

  • AppConfig (src/domain/entities/config/appConfig.ts): Zod-validated config schema with apiBaseUrl and wsBaseUrl
  • IConfigRepository (src/domain/ports/config/configRepository.ts): Repository interface for config loading

Infrastructure Layer

  • FileConfigRepository (src/infrastructure/config/fileConfigRepository.ts): Fetches /config.json with caching and error handling
  • configRepositoryInstance (src/infrastructure/config/configRepositoryInstance.ts): Singleton instance for dependency injection
  • axiosInstance: Updated to use config for baseURL via request interceptor
  • chatApi: Updated to use configRepository for streaming URL

Application Layer

  • useConfig (src/application/hooks/config/useConfig.ts): React Query hook with staleTime: Infinity

Infrastructure (flux/dev)

  • ConfigMap with config.json containing apiBaseUrl and wsBaseUrl
  • Deployment mounts config via volume at /usr/share/nginx/html/config.json

Test Plan

  • All unit tests pass (158 tests)
  • FileConfigRepository tests cover: fetch, cache, error handling, concurrent requests
  • useConfig hook tests cover: fetch, caching with React Query
  • axiosInstance tests cover: baseURL from config, error interceptors

Breaking Change

Removed VITE_API_BASE_URL and VITE_WS_BASE_URL environment variables. Use public/config.json instead.

Related

  • Jira: BRIC-5

Kaiohz added 3 commits April 6, 2026 17:50
- Replace build-time environment variables with runtime config.json
- Add FileConfigRepository with Zod validation (AppConfig schema)
- Create singleton configRepositoryInstance for dependency injection
- Update axiosInstance to fetch baseURL from config via interceptor
- Update chatApi to use configRepository for streaming URL
- Add useConfig hook with React Query caching (staleTime: Infinity)
- Follow hexagonal architecture pattern from pickpro-front

Domain:
- src/domain/entities/config/appConfig.ts - Zod-validated config schema
- src/domain/ports/config/configRepository.ts - Repository interface

Infrastructure:
- src/infrastructure/config/fileConfigRepository.ts - Config fetcher with caching
- src/infrastructure/config/configRepositoryInstance.ts - Singleton instance

Application:
- src/application/hooks/config/useConfig.ts - React Query hook

Tests:
- tests/unit/infrastructure/config/fileConfigRepository.test.ts
- tests/unit/hooks/config/useConfig.test.tsx
- Updated axiosInstance.test.ts for new mock pattern

Infrastructure changes (flux/dev):
- Update ConfigMap to JSON format with apiBaseUrl/wsBaseUrl
- Mount config.json via volume in deployment

BREAKING CHANGE: Removed VITE_API_BASE_URL and VITE_WS_BASE_URL environment variables. Use public/config.json instead.
- Add role="none" to inner <dialog> elements to prevent double role="dialog"
- Fixes SonarQube accessibility issues about nested dialog roles
- Tests passing (158 tests)
@Kaiohz Kaiohz merged commit 6c38da7 into main Apr 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant