Files
satellite-provider/_docs/02_document/modules/services_tile_service.md
T
Oleksandr Bezdieniezhnykh b0fffa6d42 [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>
2026-05-10 04:44:08 +03:00

1.9 KiB

Module: Services/TileService

Purpose

Orchestrates tile downloading and persistence. Bridges the downloader (Google Maps) with the tile repository (PostgreSQL), handling cache checks, entity creation, and metadata mapping.

Public Interface

TileService (implements ITileService)

  • DownloadAndStoreTilesAsync(double lat, double lon, double sizeMeters, int zoomLevel, CancellationToken) → Task<List<TileMetadata>>:
    1. Queries existing tiles in the region from the repository (filtered to current year's version)
    2. Calls GoogleMapsDownloaderV2.GetTilesWithMetadataAsync with existing tiles to skip
    3. Creates TileEntity for each newly downloaded tile and inserts via repository (upsert)
    4. Returns combined list of existing + new tile metadata
  • GetTileAsync(Guid id) → Task<TileMetadata?>: single tile lookup
  • GetTilesByRegionAsync(double lat, double lon, double sizeMeters, int zoomLevel) → Task<IEnumerable<TileMetadata>>: query tiles in a region

Internal Logic

  • Version is DateTime.UtcNow.Year — tiles are considered fresh for the current calendar year
  • MapToMetadata(TileEntity) → TileMetadata: entity-to-DTO mapping (static helper)
  • Tile size hardcoded to 256 pixels, image type "jpg"
  • MapsVersion formatted as "downloaded_{date}"

Dependencies

  • GoogleMapsDownloaderV2 (concrete class, not interface)
  • ITileRepository
  • SatelliteProvider.Common.DTO — GeoPoint, TileMetadata
  • SatelliteProvider.DataAccess.Models — TileEntity

Consumers

  • RegionService.ProcessRegionAsync — downloads and retrieves tiles for a region

Data Models

Transforms between TileEntity (persistence) and TileMetadata (DTO).

Configuration

None directly; relies on GoogleMapsDownloaderV2's configuration.

External Integrations

Indirect: Google Maps (via downloader), PostgreSQL (via repository).

Security

None.

Tests

No dedicated tests.