Skip to content

Backend Overview

The Volare backend is built with Laravel 12 and FilamentPHP v4, providing a robust foundation for the travel platform.

ComponentTechnologyVersion
FrameworkLaravel12.x
Admin PanelFilamentPHP4.x
LivewireLivewire3.x
PHPPHP8.4
DatabasePostgreSQL16
QueueRedis + Horizon7.x
TestingPest3.x
┌─────────────────────────────────────────────────────────────┐
│ HTTP Layer │
├─────────────────────────────────────────────────────────────┤
│ API Controllers │ Filament Resources │ Livewire │
├─────────────────────────────────────────────────────────────┤
│ Service Layer │
│ AerticketService │ BookingService │ ProductService │ ... │
├─────────────────────────────────────────────────────────────┤
│ Data Layer │
│ Eloquent Models │ DTOs │ Repositories │
├─────────────────────────────────────────────────────────────┤
│ Infrastructure │
│ PostgreSQL │ Redis │ Queue Jobs │ External APIs │
└─────────────────────────────────────────────────────────────┘

Business logic is encapsulated in service classes:

  • AerticketService - Flight search, booking, and ticketing integration
  • BookingService - Booking lifecycle management
  • ProductService - Travel product management
  • OfferService - Offer creation and management
  • AirportSearchService - PostgreSQL full-text search for airports

Admin panel CRUD operations:

  • ProductResource - Travel products management
  • BookingResource - Booking management
  • FlightBookingResource - Flight booking details
  • UserResource - User management with RBAC
  • OfferResource - Offer management

Async processing with Redis:

  • ProcessBooking - Handle booking workflow
  • SyncFlightPrices - Update flight prices
  • SendNotification - Dispatch notifications

Path-based routing for market-specific content:

GET /api/{market}/products # List products for market
GET /api/{market}/products/{id} # Get product by ID
GET /api/{market}/products/slug/{slug} # Get product by slug
GET /api/{market}/config # Get market configuration

Async booking workflow:

POST /api/bookings # Create booking
GET /api/bookings/{id} # Get booking status
POST /api/bookings/{id}/confirm # Confirm booking
  • Product - Base travel products
  • MarketProduct - Market-specific product translations
  • Booking - Customer bookings
  • FlightBooking - Flight-specific booking data
  • Offer - Combined product + flight offers
  • Airport - Airport data with FTS support
Product ─┬─ hasMany ─── MarketProduct
└─ hasMany ─── Offer
Booking ─┬─ belongsTo ─ User
└─ hasOne ──── FlightBooking
Offer ──┬─ belongsTo ── MarketProduct
└─ belongsTo ── FlightBooking
  • Session-based auth for admin panel
  • Google OAuth integration
  • API tokens for external access

PHP enums for type-safe roles and permissions:

enum Role: string
{
case Admin = 'admin';
case DmcManager = 'dmc_manager';
}
enum Permission: string
{
case ViewProducts = 'view_products';
case ManageProducts = 'manage_products';
// ...
}

Key environment variables:

Terminal window
# Application
APP_ENV=production
APP_DEBUG=false
# Database
DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_DATABASE=volare
# Queue
QUEUE_CONNECTION=redis
REDIS_HOST=redis
# External APIs
AERTICKET_API_URL=https://api.aerticket.com
AERTICKET_API_KEY=your_key
config/queue.php
'connections' => [
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
],
Terminal window
# Start development environment
./vendor/bin/sail up -d
# Run migrations
./vendor/bin/sail artisan migrate
# Run tests
./vendor/bin/sail artisan test
# Clear cache
./vendor/bin/sail artisan optimize:clear
# Generate IDE helpers
./vendor/bin/sail artisan ide-helper:generate