Files
2026-06-20 22:21:17 +10:00

133 lines
6.5 KiB
PHP

<?php
use App\Http\Controllers\AchievementController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\AdminToolsController;
use App\Http\Controllers\Api\AircraftApiController;
use App\Http\Controllers\Api\AirlineApiController;
use App\Http\Controllers\Api\UserApiController;
use App\Http\Controllers\FeedController;
use App\Http\Controllers\FlightController;
use App\Http\Controllers\FlightImportController;
use App\Http\Controllers\FollowerController;
use App\Http\Controllers\UserProfileController;
use App\Http\Controllers\LogoController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\SearchController;
use App\Http\Controllers\SettingsController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\UserFlightController;
use App\Models\Airline;
use App\Models\FlightClass;
use App\Models\FlightReason;
use App\Models\SeatType;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
/**
* App Routes
*/
Route::domain(config('app.domain'))->group(
function() {
Route::get('/', [UserProfileController::class, 'index'])->name('home');
Route::get('/dashboard', function () {
return Inertia::render('Dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/', [AdminController::class, 'dashboard'])->name('dashboard');
Route::get('/missing-liveries', [AdminController::class, 'reconcileMissingLiveries'])->name('reconcile-missing-liveries')->middleware('permission:reconcile_missing_liveries');
Route::post('/ignore-missing-livery', [AdminController::class, 'ignoreMissingLivery'])->name('ignore-missing-livery');
});
Route::middleware('auth')->group(function () {
Route::post('/flights', [FlightController::class, 'store'])->name('flights.store');
Route::get('/flights/add', [FlightController::class, 'add'])->name('flights.add');
Route::get('/flights/{flight}/edit', [FlightController::class, 'edit'])->name('flights.edit');
Route::put('/flights/{flight}', [FlightController::class, 'update'])->name('flights.update');
Route::delete('/flights/{flight}/{referrer?}', [FlightController::class, 'delete'])->name('flights.delete');
Route::patch('/settings/{key}', [SettingsController::class, 'updateSingle'])
->where('key', '[a-z_]+')
->name('settings.update-single');
Route::get('/import/fr24', [FlightImportController::class, 'showFr24Import'])->name('import.fr24');
Route::get('/reconcile', [FlightImportController::class, 'reconcile'])->name('reconcile');;
Route::get('/flights/lookup', [FlightController::class, 'lookup'])->name('flights.lookup');
Route::post('/flights/import', [FlightImportController::class, 'store'])->name('flights.import.store');
Route::post('/u/{user}/follow', [UserController::class, 'follow'])->name('profile.follow');
Route::get('/settings/{category?}', [UserController::class, 'settings'])->name('user.settings');
Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.get');
Route::patch('/notifications/{notification}/read', [NotificationController::class, 'markRead']);
Route::get('/feed', [FeedController::class, 'view'])->name('feed');
Route::patch('/settings', [SettingsController::class, 'update'])->name('settings.update');
Route::get('/followers', [FollowerController::class, 'index'])->name('followers.index');
Route::post('/followers/{follower}/approve', [FollowerController::class, 'approve'])->name('followers.approve');
Route::post('/followers/{follower}/deny', [FollowerController::class, 'deny'])->name('followers.deny');
Route::delete('/followers/{follower}', [FollowerController::class, 'remove'])->name('followers.remove');
});
Route::post('/import/save', [FlightImportController::class, 'save'])->name('import.save');
//Search Routes
Route::get('/search/airlines', [SearchController::class, 'airlines'])->name('search.airlines');
Route::get('/search/aircraft', [SearchController::class, 'aircraft'])->name('search.aircraft');
Route::get('/search/airports', [SearchController::class, 'airports'])->name('search.airports');
Route::get('/data/user/{user}/flights', [UserFlightController::class, 'viewableFlights']);
Route::get('/u/{user}', [UserProfileController::class, 'view'])->name('profile.view');
Route::get('/u/{user}/map', [UserProfileController::class, 'map'])->name('profile.map');
Route::get('/u/{user}/departure-board/{flight?}', [UserProfileController::class, 'departureBoard'])->name('profile.departure-board');
Route::get('/u/{user}/boarding-passes', [UserProfileController::class, 'boardingPasses'])->name('profile.boarding-passes');
Route::get('/u/{user}/achievements', [UserProfileController::class, 'achievements'])->name('profile.achievements');
Route::get('/u/{user}/achievement/{achievement}', [UserProfileController::class, 'achievement'])->name('profile.achievement');
Route::get('/u/{user}/flight/{userFlight}', [UserProfileController::class, 'flight'])->name('profile.flight');
require __DIR__.'/auth.php';
}
);
/**
* API Routes
*/
Route::domain(config('app.api_domain'))->group(function () {
Route::get('/', function () {
return response()->json(['message' => 'Welcome to the FlightsGoneBy API']);
});
Route::prefix('airline')->controller(AirlineApiController::class)->group(function () {
Route::get('{internalName}', 'get')->name('airline.show');
Route::get('code/{code}', 'getByCode')->name('airline.code.index');
Route::get('{internalName}/logo/tail', 'getLogoByInternalName')->name('airline.logo.tail');
Route::get('{airlineInternalName}/livery/{aircraftDesignator}', 'getLivery')->name('airline.livery');
});
Route::prefix('aircraft')->controller(AircraftApiController::class)->group(function () {
Route::get('{aircraftDesignator}/livery', 'getLivery')->name('aircraft.livery');
});
Route::prefix('user')->controller(UserApiController::class)->group(function () {
Route::get('{username}/next-flight', 'nextFlight');
Route::get('{username}/flights', 'flights');
});
});