Initial commit: Holiday Travel App with resort comparison, trip management, and multi-provider search

This commit is contained in:
2025-10-29 16:22:35 -04:00
commit 74f8e268c3
167 changed files with 18721 additions and 0 deletions

231
trip-manager.ps1 Normal file
View File

@@ -0,0 +1,231 @@
# Trip Management Script for Holiday Travel App
# Manage multiple travel plans and switch between them
$apiUrl = "http://localhost:4000"
function Show-Menu {
Write-Host "`n=== HOLIDAY TRAVEL APP - TRIP MANAGER ===" -ForegroundColor Cyan
Write-Host "1. View all trips" -ForegroundColor White
Write-Host "2. View trip details" -ForegroundColor White
Write-Host "3. Compare resorts for a trip" -ForegroundColor White
Write-Host "4. View trips by status (Planning/Booked/Completed)" -ForegroundColor White
Write-Host "5. Exit" -ForegroundColor Gray
Write-Host ""
}
function Get-AllTrips {
try {
$response = Invoke-RestMethod -Uri "$apiUrl/api/trips" -Method Get
Write-Host "`n=== YOUR TRAVEL PLANS ($($response.count) trips) ===" -ForegroundColor Cyan
Write-Host "Planning: $($response.byStatus.planning) | Booked: $($response.byStatus.booked) | Completed: $($response.byStatus.completed)`n" -ForegroundColor Yellow
foreach ($trip in $response.trips) {
$statusColor = switch ($trip.status) {
"planning" { "Yellow" }
"booked" { "Green" }
"completed" { "Gray" }
}
Write-Host "[$($trip.id)] $($trip.name)" -ForegroundColor $statusColor
Write-Host " Destination: $($trip.destination)" -ForegroundColor White
Write-Host " Region: $($trip.region)" -ForegroundColor Gray
if ($trip.departureDate) {
Write-Host " Departure: $($trip.departureDate) ($($trip.tripLength) nights)" -ForegroundColor Gray
}
if ($trip.budget) {
Write-Host " Budget: $([char]0x0024)$($trip.budget) $($trip.currency)" -ForegroundColor Green
}
if ($trip.notes) {
Write-Host " Notes: $($trip.notes)" -ForegroundColor DarkGray
}
Write-Host ""
}
}
catch {
Write-Host "Error fetching trips: $_" -ForegroundColor Red
}
}
function Get-TripDetails {
param([string]$TripId)
try {
$response = Invoke-RestMethod -Uri "$apiUrl/api/trips?id=$TripId" -Method Get
$trip = $response.trip
Write-Host "`n=== $($trip.name.ToUpper()) ===" -ForegroundColor Cyan
Write-Host "Trip #: $($trip.id)" -ForegroundColor Cyan
Write-Host "Status: $($trip.status)" -ForegroundColor Yellow
Write-Host "Destination: $($trip.destination)" -ForegroundColor White
Write-Host "Region: $($trip.region)" -ForegroundColor White
if ($trip.departureDate) {
Write-Host "Travel Dates: $($trip.departureDate) ($($trip.tripLength) nights)" -ForegroundColor White
}
if ($trip.budget) {
Write-Host "Budget: $([char]0x0024)$($trip.budget) $($trip.currency)" -ForegroundColor Green
}
if ($trip.preferences) {
Write-Host "`nPreferences:" -ForegroundColor Cyan
foreach ($key in $trip.preferences.PSObject.Properties.Name) {
$value = $trip.preferences.$key
Write-Host " ${key}: $value" -ForegroundColor Gray
}
}
if ($trip.resorts -and $trip.resorts.Count -gt 0) {
Write-Host "`nResorts ($($trip.resorts.Count)):" -ForegroundColor Cyan
foreach ($resort in $trip.resorts) {
Write-Host " - $resort" -ForegroundColor White
}
}
if ($trip.notes) {
Write-Host "`nNotes:" -ForegroundColor Cyan
Write-Host " $($trip.notes)" -ForegroundColor Gray
}
Write-Host ""
return $trip
}
catch {
Write-Host "Error fetching trip: $_" -ForegroundColor Red
return $null
}
}
function Compare-ResortsForTrip {
param([string]$TripId)
$trip = Get-TripDetails -TripId $TripId
if (-not $trip) {
return
}
if (-not $trip.resorts -or $trip.resorts.Count -eq 0) {
Write-Host "No resorts configured for this trip." -ForegroundColor Yellow
return
}
Write-Host "Running resort comparison..." -ForegroundColor Green
$data = @{
resorts = $trip.resorts
departureDate = $trip.departureDate
origin = "YOW"
tripLength = $trip.tripLength
budget = $trip.budget
contingencyPercent = 15
preferences = $trip.preferences
}
try {
$response = Invoke-RestMethod -Uri "$apiUrl/api/resort-compare" -Method Post -ContentType "application/json" -Body ($data | ConvertTo-Json -Depth 10)
Write-Host "`n=== TOP RESORT MATCHES ===" -ForegroundColor Cyan
if ($trip.budget) {
Write-Host "Budget: $([char]0x0024)$($trip.budget) | Within Budget: $($response.budgetInfo.withinBudgetCount)/$($response.budgetInfo.totalCount)" -ForegroundColor Yellow
}
Write-Host ""
$topResorts = if ($response.comparisons.Count -gt 0) { $response.comparisons } else { $response.allComparisons }
foreach ($comp in $topResorts | Select-Object -First 5) {
$r = $comp.resort
Write-Host "[$($comp.matchScore)] $($r.name)" -ForegroundColor White
Write-Host " Features: Food:$($r.features.food) Pool:$($r.features.pool) Beach:$($r.features.beach) Culture:$($r.features.culture)" -ForegroundColor Cyan
Write-Host " Package: $([char]0x0024)$([int]$comp.estimatedTotalMin)-$([char]0x0024)$([int]$comp.estimatedTotalMax) | $($r.priceRange) | Rating: $($r.tripAdvisorRating)" -ForegroundColor Gray
if ($comp.budgetStatus) {
$budgetColor = if ($comp.withinBudget) { "Green" } else { "Red" }
Write-Host " $($comp.budgetStatus)" -ForegroundColor $budgetColor
}
Write-Host ""
}
if ($response.packageSites) {
Write-Host "Package Sites:" -ForegroundColor Cyan
foreach ($site in $response.packageSites) {
Write-Host " - $site" -ForegroundColor Gray
}
}
}
catch {
Write-Host "Error comparing resorts: $_" -ForegroundColor Red
}
}
function Get-TripsByStatus {
Write-Host "`nEnter status (planning/booked/completed): " -ForegroundColor Yellow -NoNewline
$status = Read-Host
try {
$response = Invoke-RestMethod -Uri "$apiUrl/api/trips?status=$status" -Method Get
Write-Host "`n=== TRIPS - $($status.ToUpper()) ($($response.count)) ===" -ForegroundColor Cyan
Write-Host ""
foreach ($trip in $response.trips) {
Write-Host "$($trip.name)" -ForegroundColor White
Write-Host " $($trip.destination) | $($trip.region)" -ForegroundColor Gray
if ($trip.departureDate) {
Write-Host " $($trip.departureDate)" -ForegroundColor Gray
}
Write-Host ""
}
}
catch {
Write-Host "Error fetching trips: $_" -ForegroundColor Red
}
}
# Main loop
do {
Show-Menu
$choice = Read-Host "Select option"
switch ($choice) {
"1" {
Get-AllTrips
}
"2" {
Get-AllTrips
Write-Host "`nEnter trip # (number): " -ForegroundColor Yellow -NoNewline
$tripId = Read-Host
Get-TripDetails -TripId $tripId
}
"3" {
Get-AllTrips
Write-Host "`nEnter trip # (number): " -ForegroundColor Yellow -NoNewline
$tripId = Read-Host
Compare-ResortsForTrip -TripId $tripId
}
"4" {
Get-TripsByStatus
}
"5" {
Write-Host "`nGoodbye!" -ForegroundColor Green
break
}
default {
Write-Host "Invalid option. Please try again." -ForegroundColor Red
}
}
if ($choice -ne "5") {
Write-Host "`nPress any key to continue..." -ForegroundColor DarkGray
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
} while ($choice -ne "5")