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
This commit is contained in:
home
2026-03-01 21:58:32 +03:00
parent e6b9cfc60a
commit 08bd41e75c
71 changed files with 12364 additions and 945 deletions

View File

@@ -1,5 +1,5 @@
# Dockerfile for agent-svc only
FROM golang:1.22-alpine AS builder
FROM golang:1.24-alpine AS builder
RUN apk add --no-cache git ca-certificates

View File

@@ -24,6 +24,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/file-svc ./cmd/fi
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/thread-svc ./cmd/thread-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/finance-heatmap-svc ./cmd/finance-heatmap-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/learning-svc ./cmd/learning-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/travel-svc ./cmd/travel-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/labs-svc ./cmd/labs-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/podcast-svc ./cmd/podcast-svc
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bin/admin-svc ./cmd/admin-svc
@@ -42,7 +43,7 @@ COPY --from=builder /bin/* /app/
ENV SERVICE=api-gateway
ENV PORT=3015
EXPOSE 3015 3018 3005 3001 3020 3021 3002 3025 3026 3027 3040
EXPOSE 3015 3018 3005 3001 3020 3021 3002 3025 3026 3027 3035 3040
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:${PORT}/health || exit 1

View File

@@ -1,5 +1,5 @@
# Build stage
FROM golang:1.22-alpine AS builder
FROM golang:1.24-alpine AS builder
RUN apk add --no-cache git ca-certificates

View File

@@ -1,5 +1,5 @@
# Dockerfile for chat-svc only
FROM golang:1.22-alpine AS builder
FROM golang:1.24-alpine AS builder
RUN apk add --no-cache git ca-certificates

View File

@@ -1,5 +1,5 @@
# Dockerfile for discover-svc only
FROM golang:1.22-alpine AS builder
FROM golang:1.24-alpine AS builder
RUN apk add --no-cache git ca-certificates

View File

@@ -1,5 +1,5 @@
# Dockerfile for search-svc only
FROM golang:1.22-alpine AS builder
FROM golang:1.24-alpine AS builder
RUN apk add --no-cache git ca-certificates

View File

@@ -39,6 +39,7 @@ services:
- DISCOVER_SVC_URL=http://discover-svc:3002
- FINANCE_HEATMAP_SVC_URL=http://finance-heatmap-svc:3033
- LEARNING_SVC_URL=http://learning-svc:3034
- TRAVEL_SVC_URL=http://travel-svc:3035
- ADMIN_SVC_URL=http://admin-svc:3040
- JWT_SECRET=${JWT_SECRET}
- REDIS_URL=redis://redis:6379
@@ -50,6 +51,7 @@ services:
- agent-svc
- thread-svc
- admin-svc
- travel-svc
- redis
networks:
- gooseek
@@ -61,6 +63,8 @@ services:
environment:
- SERVICE=chat-svc
- PORT=3005
- JWT_SECRET=${JWT_SECRET}
- AUTH_SVC_URL=http://auth-svc:3050
- MASTER_AGENTS_SVC_URL=http://agent-svc:3018
- DISCOVER_SVC_URL=http://discover-svc:3002
ports:
@@ -78,9 +82,14 @@ services:
environment:
- SERVICE=agent-svc
- PORT=3018
- JWT_SECRET=${JWT_SECRET}
- AUTH_SVC_URL=http://auth-svc:3050
- SEARXNG_URL=http://searxng:8080
- DISCOVER_SVC_URL=http://discover-svc:3002
- CRAWL4AI_URL=http://crawl4ai:11235
- TRAVEL_SVC_URL=http://travel-svc:3035
- TRAVELPAYOUTS_TOKEN=${TRAVELPAYOUTS_TOKEN}
- TRAVELPAYOUTS_MARKER=${TRAVELPAYOUTS_MARKER}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- GEMINI_API_KEY=${GEMINI_API_KEY}
@@ -92,6 +101,9 @@ services:
depends_on:
- search-svc
- discover-svc
- travel-svc
- searxng
- crawl4ai
networks:
- gooseek
@@ -254,6 +266,8 @@ services:
- SERVICE=finance-heatmap-svc
- PORT=3033
- REDIS_URL=redis://redis:6379
# MOEX, Крипто, Валюты работают без URL (встроенные провайдеры). Для своих рынков — URL сервиса, GET ?market=...&range=...
- FINANCE_DATA_PROVIDER_URL=${FINANCE_DATA_PROVIDER_URL:-}
ports:
- "3033:3033"
depends_on:
@@ -283,6 +297,39 @@ services:
networks:
- gooseek
travel-svc:
build:
context: ../..
dockerfile: deploy/docker/Dockerfile.all
environment:
- SERVICE=travel-svc
- PORT=3035
- DATABASE_URL=postgres://gooseek:gooseek@postgres:5432/gooseek?sslmode=disable
- JWT_SECRET=${JWT_SECRET}
- AUTH_SVC_URL=http://auth-svc:3050
# Российские API (по умолчанию)
- USE_RUSSIAN_APIS=true
- TRAVELPAYOUTS_TOKEN=${TRAVELPAYOUTS_TOKEN}
- TRAVELPAYOUTS_MARKER=${TRAVELPAYOUTS_MARKER}
- TWOGIS_API_KEY=${TWOGIS_API_KEY}
# Международные API (опционально)
- AMADEUS_API_KEY=${AMADEUS_API_KEY}
- AMADEUS_API_SECRET=${AMADEUS_API_SECRET}
- OPENROUTE_API_KEY=${OPENROUTE_API_KEY}
# LLM (TimeWeb)
- LLM_PROVIDER=timeweb
- LLM_MODEL=${DEFAULT_LLM_MODEL:-gpt-4o-mini}
- TIMEWEB_API_BASE_URL=${TIMEWEB_API_BASE_URL}
- TIMEWEB_AGENT_ACCESS_ID=${TIMEWEB_AGENT_ACCESS_ID}
- TIMEWEB_API_KEY=${TIMEWEB_API_KEY}
ports:
- "3035:3035"
depends_on:
- postgres
- auth-svc
networks:
- gooseek
admin-svc:
build:
context: ../..
@@ -331,12 +378,12 @@ services:
context: ../../webui
dockerfile: Dockerfile
args:
- NEXT_PUBLIC_DISABLED_ROUTES=${NEXT_PUBLIC_DISABLED_ROUTES:-/travel,/medicine,/finance,/learning,/spaces,/history}
- NEXT_PUBLIC_DISABLED_ROUTES=${NEXT_PUBLIC_DISABLED_ROUTES:-/medicine}
environment:
- NODE_ENV=production
- API_URL=http://api-gateway:3015
- NEXT_PUBLIC_API_URL=
- NEXT_PUBLIC_DISABLED_ROUTES=${NEXT_PUBLIC_DISABLED_ROUTES:-/travel,/medicine,/finance,/learning,/spaces,/history}
- NEXT_PUBLIC_DISABLED_ROUTES=${NEXT_PUBLIC_DISABLED_ROUTES:-/medicine}
ports:
- "3000:3000"
depends_on:
@@ -381,7 +428,7 @@ services:
searxng:
image: searxng/searxng:latest
volumes:
- ../../../deploy/docker/searxng:/etc/searxng:ro
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=http://localhost:8080
ports:

View File

@@ -0,0 +1,23 @@
use_default_settings: true
general:
instance_name: "GooSeek Search"
debug: false
search:
safe_search: 0
autocomplete: ""
default_lang: "ru"
formats:
- html
- json
server:
secret_key: "gooseek-searxng-secret-key-change-in-production"
bind_address: "0.0.0.0"
port: 8080
limiter: false
image_proxy: false
ui:
static_use_hash: true