docs(geo): канон переведён на внешний геокодер OpenCage

Стек/Ops/контракт: OpenCage API через прокси бэкенда, ключ не покидает
сервер; source=opencage; free-тариф 2500 запросов/сутки и 1 rps,
402/403/429 апстрима -> 503 geo_unavailable; ToS разрешает хранение
результатов. Self-host Photon исключён из стека.

Refs EventHub/EventHubSpec#21
This commit is contained in:
2026-08-18 23:30:23 +03:00
parent 588a282b6d
commit b79fd81260
3 changed files with 23 additions and 23 deletions
+3 -3
View File
@@ -271,7 +271,7 @@ Legacy: прямой `POST /v1/calendars/:id/specialists` **не использ
cold = gzip-файлы. Контракт: [`ARCHIVE.md`](ARCHIVE.md). Код: Back#76.
#### Фаза 3 / гео (Spec#19, канон Spec#21)
- Стек: свой Photon + MapLibre/OpenFreeMap; Google/Яндекс **не** провайдеры
- Стек: OpenCage (внешний API, прокси через бэк) + MapLibre/OpenFreeMap; Google/Яндекс **не** провайдеры
(только outbound-ссылки с карточки). Контракт: [`GEO.md`](GEO.md). Код: Back#77.
### 2.1.3. Share / приглашения (соредактор и заместитель)
@@ -625,9 +625,9 @@ src/
**не** входит в контракт: поле URL.
Гео: `lat`+`lon` (и опциональный `radius` 1..100) — ближайшие события и календари;
`sort=distance`; в элементах `distance_km` ([GEO.md](GEO.md)).
- `GET /v1/geo/suggest` — typeahead адреса (Photon); **без токена** + IP rate-limit.
- `GET /v1/geo/suggest` — typeahead адреса (OpenCage); **без токена** + IP rate-limit.
- `POST /v1/geo/geocode``{q, lang?}``{address, lat, lon, source}` (Bearer).
- `POST /v1/geo/reverse``{lat, lon, lang?}` (Bearer). Photon down`503` `geo_unavailable`.
- `POST /v1/geo/reverse``{lat, lon, lang?}` (Bearer). OpenCage недоступен/квота`503` `geo_unavailable`.
- `GET /v1/calendars` — список календарей (auth): owned shared (`role`, `share_rights`,
`mirror_to_default`).
- `POST /v1/calendars` — создать календарь (`commercial` → нужна уже active sub/trial;