mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-06-21 20:01:13 +00:00
b0fffa6d42
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>
2.1 KiB
2.1 KiB
Module: DataAccess/Repositories/TileRepository
Purpose
Dapper-based repository for the tiles table. Handles CRUD operations and spatial queries for satellite tile records.
Public Interface
ITileRepository (interface)
GetByIdAsync(Guid id) → Task<TileEntity?>GetByTileCoordinatesAsync(int tileZoom, int tileX, int tileY) → Task<TileEntity?>: finds tile by slippy map coordinates, returns latest versionFindExistingTileAsync(double lat, double lon, double tileSizeMeters, int zoomLevel, int version) → Task<TileEntity?>: fuzzy coordinate match (tolerance: 0.0001° lat/lon, 1m tile size)GetTilesByRegionAsync(double lat, double lon, double sizeMeters, int zoomLevel) → Task<IEnumerable<TileEntity>>: spatial bounding box query with expanded range to cover tile edgesInsertAsync(TileEntity tile) → Task<Guid>: upsert —ON CONFLICT (latitude, longitude, tile_zoom, tile_size_meters, version) DO UPDATEfile_path, tile_x, tile_y, updated_atUpdateAsync(TileEntity tile) → Task<int>DeleteAsync(Guid id) → Task<int>
TileRepository (implementation)
Constructs a new NpgsqlConnection per method call (no connection pooling at the repository level; Npgsql pools connections internally).
Internal Logic
GetTilesByRegionAsynccalculates a bounding box by expanding the requested region by 2 × tile size to ensure edge tiles are included. Uses meters-to-degrees approximation (111,000 m/degree latitude, adjusted for longitude).InsertAsyncuses an upsert pattern to handle duplicate tile downloads gracefully.GetByTileCoordinatesAsyncorders byversion DESCand takes the latest.
Dependencies
- NuGet:
Dapper,Npgsql SatelliteProvider.DataAccess.Models.TileEntityMicrosoft.Extensions.Logging
Consumers
TileService— all read/write operationsProgram.cs(ServeTile, GetTileByLatLon handlers) —GetByTileCoordinatesAsync,InsertAsync
Data Models
Operates on TileEntity.
Configuration
Receives connection string via constructor.
External Integrations
PostgreSQL — SQL queries via Dapper + Npgsql.
Security
None.
Tests
No dedicated repository tests.