Trip Maker Debugging Setup¶
Branch Information¶
- Repository: nino-perun/tqpro
- Base Branch: codev
- Debug Branch: claude/debug-trip-maker-flights-014m5S1ZPEHLEYqi76McZD1b
- Status: ✓ Created and pushed successfully
Recent Flight Management Changes¶
The codev branch includes several recent fixes related to flight management:
- Commit ed10225 - Fix doAddFlight to parse datetime strings and handle all flight data
- Added ISO 8601 duration parsing for flight durations (PT4H30M format)
- Fixed datetime parsing from string to Date objects
- Improved handling of baseCostPerPerson (supports BigDecimal, Number, String)
- Added layover data extraction with duration parsing
-
Enhanced airport transport data handling
-
Commit ab39dc1 - Fix addFlightToItinerary to extract all required fields from offer
-
Commit 2cbf61a - Fix createFlightCard to use correct offer structure
-
Commit 45499e0 - Fix flight search parameter name: adults -> numAdults
-
Commit 15bc11d - Add flight search pagination support
-
Commit 96e8f82 - Handle null returnDate for one-way flight searches
Module Structure¶
Core Components¶
Database Entities (tqapp/src/main/java/com/perun/tlinq/client/nts/db/tripmaker/)¶
- FlightOptionEntity.java - Flight options in itinerary
- Stores flight details: origin, destination, dates, airline, cabin class
- JSON fields for layovers and airport transport
-
Links to Amadeus offer IDs
-
ActivityEntity.java - Activities in itinerary
- Activity details: date, time period, name, description
- Transport and guide inclusion flags
-
Cost and display order
-
TripMakerItineraryEntity.java - Itinerary container
- TripProjectEntity.java - Trip project (parent of itineraries)
- AccommodationOptionEntity.java - Accommodation options
- ExclusionEntity.java - Exclusions list
- CostOverrideEntity.java - Cost overrides
Business Logic (tqapp/src/main/java/com/perun/tlinq/entity/tripmaker/)¶
- TripMakerFacade.java (1020 lines)
- Complete CRUD operations for all entities
- Flight operations: addFlight(), getFlights(), removeFlight()
- Activity operations: addActivity(), getActivities(), updateActivity(), removeActivity()
- Cost calculation: calculateCostBreakdown()
- Uses Gson for JSON serialization with date format: "yyyy-MM-dd HH:mm:ss"
REST API (tqapi/src/main/java/com/perun/tlinq/api/)¶
- TripMakerApi.java (1820 lines)
- All REST endpoints under /tripmaker/
- Flight endpoints: /itinerary/add-flight, /itinerary/get-flights, /itinerary/remove-flight
- Activity endpoints: /itinerary/add-activity, /itinerary/get-activities, /itinerary/update-activity, /itinerary/remove-activity
- Search endpoints: /activity/search (placeholder for Amadeus integration)
- doAddFlight() method handles complex flight data parsing
Key API Endpoints for Debugging¶
Flight Management¶
POST /tripmaker/itinerary/add-flight
- Accepts: itineraryId, flightType, originAirport, destinationAirport,
departureDatetime (ISO format), arrivalDatetime (ISO format),
totalDurationMinutes, airlineCode, flightNumber, cabinClass,
baseCostPerPerson, amadeusOfferId, layovers[], airportTransport{}
Activity Management¶
POST /tripmaker/itinerary/add-activity
- Accepts: itineraryId, activityDate, timePeriod, activityName, description,
durationMinutes, transportIncluded, guideIncluded, baseCostTotal,
source, amadeusOfferId
Testing¶
Test Suite Location¶
- tqapp/src/test/java/com/perun/tlinq/entity/tripmaker/TripMakerFacadeTest.java
- 24 ordered integration tests covering all operations
- Tests run against real database (no mocking)
- Full lifecycle: Create → Read → Update → Delete
Running Tests¶
Known Issues & Debug Focus Areas¶
Flight Management¶
- DateTime Parsing - Recent fix handles ISO timestamp format
- Duration Parsing - ISO 8601 format (PT4H30M) converted to minutes
- Cost Handling - Multiple numeric type support (BigDecimal, Number, String)
- Layover Data - Complex nested structure with airport and duration
- Amadeus Offer Integration - Mapping from Amadeus response to entity
Activity Management¶
- Display Order - Sorting and ordering within itinerary
- Date/Time Period - Scheduling activities on specific dates
- Cost Calculation - Integration with cost breakdown
- Amadeus Activities API - Future integration (currently NOT_IMPLEMENTED)
Database Schema¶
Tables (schema: nts)¶
- trip_project
- trip_maker_itinerary
- flight_option (with JSON columns: layovers, airport_transport)
- activity
- accommodation_option
- exclusion
- cost_override
Sequences¶
- nts.flight_option_seq
- nts.activity_seq
- (others for each table)
Documentation¶
Available Docs (docs/tripmaker/)¶
- TripMaker_API_Specification.md (52KB)
- TripMaker_Implementation_Guide.md (54KB)
- TripMaker_RequirementSpecs.md (27KB)
Common Debugging Commands¶
View logs¶
Check database¶
-- View recent flights
SELECT * FROM nts.flight_option ORDER BY created_at DESC LIMIT 10;
-- View recent activities
SELECT * FROM nts.activity ORDER BY created_at DESC LIMIT 10;
-- Check itinerary contents
SELECT
(SELECT COUNT(*) FROM nts.flight_option WHERE itinerary_id = i.itinerary_id) as flights,
(SELECT COUNT(*) FROM nts.activity WHERE itinerary_id = i.itinerary_id) as activities,
(SELECT COUNT(*) FROM nts.accommodation_option WHERE itinerary_id = i.itinerary_id) as accommodations
FROM nts.trip_maker_itinerary i
WHERE i.itinerary_id = ?;
Build and deploy¶
Environment Setup¶
Required¶
- Java 17+
- PostgreSQL database
- TLINQ_HOME environment variable pointing to config directory
Configuration Files¶
- config/tlinq.properties - Database and API configuration
- config/application.properties - Application settings
Next Steps for Debugging¶
- Identify the Issue: Review logs and error reports
- Reproduce: Use test suite or API calls to reproduce
- Isolate: Determine if issue is in:
- API layer (TripMakerApi.java) - request parsing
- Business logic (TripMakerFacade.java) - data processing
- Database layer (Entity classes) - persistence
- Fix: Make targeted changes
- Test: Run TripMakerFacadeTest to verify
- Commit: Clear commit message describing the fix
Created: 2025-11-21 Branch: claude/debug-trip-maker-flights-014m5S1ZPEHLEYqi76McZD1b