Overview
The adventureTubeData MongoDB collection is the core geospatial dataset powering both iOS and Web clients. It contains 39 documents mapping YouTube videos to geographic locations with chapters.
- 4 original manually-created documents
- 35 auto-generated from
chris_video+victoria_camping_sites+ YouTube Data API v3
API Endpoint
GET https://api.travel-tube.com/web/geo/data
This endpoint returns all adventureTubeData documents to both iOS and Web clients.
Request Flow (3-Service Chain)
Client (iOS/Web)
│
▼
Gateway Service (8030)
│ route /web/** → web-service
▼
Web Service (8040)
│ REST call /geo/data via Eureka
▼
Geospatial Service (8060)
│ Query adventureTubeData collection
▼
MongoDB → 39 documents
│
▼ (response flows back)
Geospatial → Web → Gateway → Client (200 OK + all data)
Zipkin Distributed Trace
Zipkin Trace: gateway-service → web-service → geospatial-service
- Total Duration: 471ms
- Services: 3
- Total Spans: 13
- Outcome: SUCCESS
| Service | Span | Duration |
|---|---|---|
| gateway-service | http get /web/geo/data | 471ms |
| web-service | http get /web/geo/data | 383ms |
| web-service | security filterchain before | 5.9ms |
| web-service | authorize request | 1.3ms |
| web-service | secured request | 351ms |
| web-service | http get (to geospatial) | 290ms |
| geospatial-service | http get /geo/data | 241ms |
| geospatial-service | security filterchain before | 9.5ms |
| geospatial-service | authorize request | 2.8ms |
| geospatial-service | secured request (MongoDB query) | 213ms |
The heaviest span is geospatial-service’s MongoDB query at 213ms, fetching all 39 adventureTubeData documents.
Gateway Route Configuration
// GatewayConfig.java
.route("web-service", r -> r.path("/web/**")
.filters(f -> f.filter(filter))
.uri("lb://web-service"))
Data Model: adventureTubeData
Each document contains:
| Field | Type | Description |
|---|---|---|
youtubeContentID |
String | YouTube video ID |
youtubeTitle |
String | Video title from YouTube API |
youtubeDescription |
String | Video description from YouTube API |
userContentType |
String | Category (e.g. “National Parks”) |
userTripDuration |
String | Trip length (e.g. “daytrip”) |
places[] |
Array | GeoJSON Point locations with name, placeID |
chapters[] |
Array | Video chapters with youtubeTime, categories, place |
coreDataID |
UUID | Unique identifier |
Data Population Script
scripts/victoria-to-adventuretube.py — joins chris_video + victoria_camping_sites, enriches via YouTube Data API v3, inserts into adventureTubeData.
Backup: scripts/adventureTubeData-backup.json (39 docs)
Restore command:
mongoimport --uri="mongodb://strider:****@travel-tube.com:27017/adventuretube?authSource=admin" \
--collection=adventureTubeData --jsonArray --file=scripts/adventureTubeData-backup.json --drop
Created: 2026-03-02
