Files
gooseek/CONTINUE.md
home 08bd41e75c feat: travel service with 2GIS routing, POI, hotels + finance providers + UI overhaul
- Add travel-svc microservice (Amadeus, TravelPayouts, 2GIS, OpenRouteService)
- Add travel orchestrator with parallel collectors (events, POI, hotels, flights)
- Add 2GIS road routing with transport cost calculation (car/bus/taxi)
- Add TravelMap (2GIS MapGL) and TravelWidgets components
- Add useTravelChat hook for streaming travel agent responses
- Add finance heatmap providers refactor
- Add SearXNG settings, API proxy routes, Docker compose updates
- Update Dockerfiles, config, types, and all UI pages for consistency

Made-with: Cursor
2026-03-01 21:58:32 +03:00

88 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Недоделки — начать отсюда
## Последнее изменение (01.03.2026)
### СДЕЛАНО: Маршруты по дорогам + стоимость проезда
#### Что сделано:
**1. `backend/internal/travel/twogis.go` — 2GIS Routing API клиент:**
- Метод `GetRoute(ctx, points, transport)` — POST `routing.api.2gis.com/routing/7.0.0/global`
- Поддержка transport: `driving`, `taxi`, `walking`, `bicycle`
- Парсинг WKT LINESTRING из `outcoming_path.geometry[].selection`
- Сборка `RouteDirection` с geometry, distance, duration, steps
**2. `backend/internal/travel/service.go` — переключение на 2GIS:**
- `GetRoute()` сначала пробует 2GIS Routing, fallback на OpenRouteService
- `mapProfileToTwoGISTransport()` — маппинг профилей
**3. `backend/internal/agent/travel_data_client.go` — обновлённый клиент:**
- `GetRoute(ctx, points, transport)` — полный `RouteDirectionResult` с geometry
- `GetRouteSegments()` — маршруты между каждой парой точек
- Новые типы: `RouteDirectionResult`, `RouteGeometryResult`, `RouteStepResult`, `RouteSegmentResult`
**4. `backend/internal/agent/travel_orchestrator.go` — дорожные маршруты:**
- `emitTravelWidgets()` вызывает `buildRoadRoute()` вместо прямых линий
- `buildTransportSegments()` — маршруты между каждой парой точек
- `calculateTransportCosts()` — расчёт стоимости (машина ~8₽/км, автобус ~2.5₽/км, такси ~100₽+18₽/км)
- `routeDirection` и `segments` передаются в виджеты `travel_map` и `travel_itinerary`
**5. Фронтенд — отображение дорожных маршрутов:**
- `types.ts` — новые типы `RouteSegment`, `TransportCostOption`, расширены `TravelMapWidgetParams` и `TravelItineraryWidgetParams`
- `useTravelChat.ts` — извлечение `routeDirection` и `segments` из виджетов, новые state
- `travel/page.tsx` — передача `routeDirection` в `TravelMap`
- `TravelWidgets.tsx``TransportSegmentCard` между элементами маршрута с иконками машина/автобус/такси и ценами
---
### СДЕЛАНО ранее: Переработка POI коллектора — 2GIS как основной источник
(см. предыдущую версию CONTINUE.md)
---
## Осталось сделать
### Высокий приоритет
1. **Цены отелей из SearXNG** — LLM не всегда извлекает цены (0 RUB/night). Нужно:
- Добавить fallback: если цена 0, попробовать парсить из snippet
- Файл: `backend/internal/agent/travel_hotels_collector.go`
2. **Авиабилеты для маршрутов** — "Золотое кольцо" не имеет IATA кода. Нужно:
- Если destination не IATA, искать билеты до первого конкретного города в маршруте
- Файл: `backend/internal/agent/travel_flights_collector.go`
### Средний приоритет
3. **Drag & drop в ItineraryWidget** — перетаскивание элементов между днями
4. **Кеш SearXNG результатов** — Redis кеш на 10-30 минут
5. **Сохранение draft в БД** — персистентность TripDraft через trip_drafts таблицу
### Низкий приоритет
6. **Экспорт маршрута** — PDF/Markdown
7. **Real-time обновления** — WebSocket для тредов
---
## Контекст
### Архитектура travel pipeline:
```
User -> /travel page -> streamTravelAgent() -> api-gateway -> chat-svc -> agent-svc
-> RunTravelOrchestrator:
1. Planner Agent (LLM) -> TripBrief
2. Geocode destinations -> travel-svc -> 2GIS Geocoder API
3. Parallel collectors:
- Events: SearXNG -> Crawl4AI -> LLM extraction -> geocode (2GIS)
- POI: 2GIS Places API (primary) -> LLM enrichment -> SearXNG fallback
- Hotels: SearXNG -> Crawl4AI -> LLM extraction -> geocode (2GIS)
- Transport: TravelPayouts API
4. Itinerary Builder (LLM) -> ItineraryDay[]
5. Road routing: 2GIS Routing API -> RouteDirection (дорожная геометрия)
6. Transport costs: calculateTransportCosts() -> машина/автобус/такси
7. Widget emission -> NDJSON stream -> frontend (карта 2GIS MapGL)
```