feat(proj): init

This commit is contained in:
vl.arkhangelskii
2026-09-21 03:53:15 +03:00
commit 3e34f391b3
258 changed files with 20968 additions and 0 deletions
@@ -0,0 +1,25 @@
# 2026-09-20 — Тайловый сервер на C#
Собрано с нуля: ASP.NET Core 8, Clean Architecture.
## Что сделано
- Воркер `MapSyncHostedService`: cron раз в сутки (`0 3 * * *` UTC) + прогон при старте.
- Для каждого extract из `TileServer:Extracts``data/extracts.json`): скачивание `.osm.pbf` с Geofabrik (If-None-Match / 304), сборка OpenMapTiles MBTiles через `planetiler-openmaptiles` (Java 21+).
- По умолчанию один источник: `central-fed-district`. Можно добавлять сколько угодно регионов — воркер проходит все по очереди.
- `GET /api/v1/tiles/{source}/{z}/{x}/{y}.pbf` — MapLibre XYZ, TMS Y-flip, gzip как в MBTiles.
- `GET /api/v1/styles/{name}?source=...` — стили по имени; `PUT` и файлы `data/styles/*.json`.
- Демо: `GET /` MapLibre GL, выбор источника/стиля, статус воркера.
- Сборка тайлов не на чистом C#: генерация схемы OpenMapTiles — Planetiler. C# оркестрирует download/build/serve.
## Как проверялось
- `dotnet build` / 9 unit-тестов — ок.
- Локальный прогон API: демо 200, стили osm-bright/dark/positron, TileJSON, 204 на отсутствующий тайл, PUT второго extract, 404 на неизвестный стиль.
- Браузерных MCP в сессии не было — проверка через HTTP.
## Важно для следующего запуска
- Без Java 21 воркер скачает PBF, но не соберёт тайлы.
- Первая сборка ЦФО — часы и много диска/RAM (`TileServer:JvmMaxHeap`).
- `TileServer:Sync:RunOnStartup` по умолчанию `true`.