mirror of
https://github.com/mblanke/holiday-travel-app.git
synced 2026-03-01 05:20:22 -05:00
232 lines
8.1 KiB
PowerShell
232 lines
8.1 KiB
PowerShell
# 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")
|