Skip to content

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:

  1. Commit ed10225 - Fix doAddFlight to parse datetime strings and handle all flight data
  2. Added ISO 8601 duration parsing for flight durations (PT4H30M format)
  3. Fixed datetime parsing from string to Date objects
  4. Improved handling of baseCostPerPerson (supports BigDecimal, Number, String)
  5. Added layover data extraction with duration parsing
  6. Enhanced airport transport data handling

  7. Commit ab39dc1 - Fix addFlightToItinerary to extract all required fields from offer

  8. Commit 2cbf61a - Fix createFlightCard to use correct offer structure

  9. Commit 45499e0 - Fix flight search parameter name: adults -> numAdults

  10. Commit 15bc11d - Add flight search pagination support

  11. 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{}
POST /tripmaker/itinerary/get-flights
- Accepts: itineraryId
- Returns: { flights: [...] }
POST /tripmaker/itinerary/remove-flight
- Accepts: flightId

Activity Management

POST /tripmaker/itinerary/add-activity
- Accepts: itineraryId, activityDate, timePeriod, activityName, description,
           durationMinutes, transportIncluded, guideIncluded, baseCostTotal,
           source, amadeusOfferId
POST /tripmaker/itinerary/get-activities
- Accepts: itineraryId
- Returns: { activities: [...] }
POST /tripmaker/itinerary/update-activity
- Accepts: activityId, itineraryId, updated fields
POST /tripmaker/itinerary/remove-activity
- Accepts: activityId

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

./gradlew test --tests "TripMakerFacadeTest"

Known Issues & Debug Focus Areas

Flight Management

  1. DateTime Parsing - Recent fix handles ISO timestamp format
  2. Duration Parsing - ISO 8601 format (PT4H30M) converted to minutes
  3. Cost Handling - Multiple numeric type support (BigDecimal, Number, String)
  4. Layover Data - Complex nested structure with airport and duration
  5. Amadeus Offer Integration - Mapping from Amadeus response to entity

Activity Management

  1. Display Order - Sorting and ordering within itinerary
  2. Date/Time Period - Scheduling activities on specific dates
  3. Cost Calculation - Integration with cost breakdown
  4. 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

tail -f logs/tqapi.log

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

./gradlew clean build
./gradlew :tqapi:war

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

  1. Identify the Issue: Review logs and error reports
  2. Reproduce: Use test suite or API calls to reproduce
  3. Isolate: Determine if issue is in:
  4. API layer (TripMakerApi.java) - request parsing
  5. Business logic (TripMakerFacade.java) - data processing
  6. Database layer (Entity classes) - persistence
  7. Fix: Make targeted changes
  8. Test: Run TripMakerFacadeTest to verify
  9. Commit: Clear commit message describing the fix

Created: 2025-11-21 Branch: claude/debug-trip-maker-flights-014m5S1ZPEHLEYqi76McZD1b