mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-06-22 03:01:14 +00:00
[AZ-284] Autodev baseline + testability refactor
Phase A baseline outputs from /autodev (Steps 1-5): - Problem & solution docs (_docs/00_problem, _docs/01_solution) - Codebase documentation (_docs/02_document) incl. architecture, module-layout, glossary, system-flows, baseline compliance scan - Test specs (blackbox, performance, resilience, security, resource, traceability matrix) - Test task decomposition (_docs/02_tasks/todo): AZ-285..AZ-290 - Testability refactor (_docs/04_refactoring/01-testability-refactoring): - TC-01 Move DownloadedTileInfoV2 + new ExistingTileInfo to Common.DTO - TC-02 Replace dead ISatelliteDownloader API with real signatures - TC-03 GoogleMapsDownloaderV2 implements ISatelliteDownloader - TC-04 TileService depends on ISatelliteDownloader (mockable) - TC-05 DI + endpoints use ISatelliteDownloader - Test runner scripts (scripts/run-tests.sh, run-performance-tests.sh) - Autodev state pointer (_docs/_autodev_state.md) Prepares the codebase for AZ-285..AZ-290 unit/integration test work. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# Module: Common/Configs
|
||||
|
||||
## Purpose
|
||||
Configuration POCOs that bind to `appsettings.json` sections via `IOptions<T>` pattern.
|
||||
|
||||
## Public Interface
|
||||
|
||||
### MapConfig
|
||||
- `Service` (string): map provider name (e.g., "GoogleMaps")
|
||||
- `ApiKey` (string): API key for the map provider
|
||||
|
||||
### StorageConfig
|
||||
- `TilesDirectory` (string): base path for tile storage (default: `/tiles`)
|
||||
- `ReadyDirectory` (string): base path for output files (default: `/ready`)
|
||||
- `GetTileSubdirectoryPath(int zoomLevel, int tileX, int tileY) → string`: computes bucketed subdirectory path (`{tiles}/{zoom}/{xBucket}/{yBucket}`) using integer division by 1000
|
||||
- `GetTileFilePath(int zoomLevel, int tileX, int tileY, string timestamp) → string`: computes full file path with timestamped filename (`tile_{z}_{x}_{y}_{ts}.jpg`)
|
||||
|
||||
### ProcessingConfig
|
||||
- `MaxConcurrentDownloads` (int, default: 4): semaphore limit for parallel tile downloads
|
||||
- `MaxConcurrentRegions` (int, default: 3): parallel region processing workers
|
||||
- `DefaultZoomLevel` (int, default: 20): fallback zoom level
|
||||
- `QueueCapacity` (int, default: 100): bounded channel capacity for region request queue
|
||||
- `DelayBetweenRequestsMs` (int, default: 50): throttle delay between Google Maps requests
|
||||
- `SessionTokenReuseCount` (int, default: 100): tiles per session token before rotation
|
||||
|
||||
### DatabaseConfig
|
||||
- `ConnectionString` (string): DB connection string (unused — connection string is resolved directly from `IConfiguration` in `Program.cs`)
|
||||
|
||||
## Internal Logic
|
||||
`StorageConfig.GetTileSubdirectoryPath` buckets tiles by dividing X/Y coordinates by 1000, preventing filesystem performance degradation from too many files in one directory.
|
||||
|
||||
## Dependencies
|
||||
None (pure POCOs, no internal imports).
|
||||
|
||||
## Consumers
|
||||
- `Program.cs` — binds from config sections via `builder.Services.Configure<T>()`
|
||||
- `GoogleMapsDownloaderV2` — reads `MapConfig`, `StorageConfig`, `ProcessingConfig` via `IOptions<T>`
|
||||
- `RegionService` — reads `StorageConfig`
|
||||
- `RegionProcessingService` — reads `ProcessingConfig`
|
||||
- `RouteProcessingService` — reads `StorageConfig`
|
||||
- `RegionRequestQueue` — receives `QueueCapacity` as constructor param
|
||||
|
||||
## Data Models
|
||||
No domain entities; these are configuration DTOs.
|
||||
|
||||
## Configuration
|
||||
These classes **define** the configuration shape consumed by all services.
|
||||
|
||||
| Config Class | appsettings Section |
|
||||
|-------------|-------------------|
|
||||
| MapConfig | `MapConfig` |
|
||||
| StorageConfig | `StorageConfig` |
|
||||
| ProcessingConfig | `ProcessingConfig` |
|
||||
| DatabaseConfig | (not wired — connection string read directly) |
|
||||
|
||||
## External Integrations
|
||||
None.
|
||||
|
||||
## Security
|
||||
`MapConfig.ApiKey` holds the Google Maps API key. In production, injected via environment variable `MapConfig__ApiKey`.
|
||||
|
||||
## Tests
|
||||
No dedicated tests.
|
||||
Reference in New Issue
Block a user