Spaces:
Sleeping
Sleeping
File size: 7,231 Bytes
10dc6f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | <?php
use App\Http\Controllers\HomeController;
use App\Http\Controllers\EventController;
use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\MyTicketsController;
use App\Http\Controllers\OrdersController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\Organizer\DashboardController as OrgDashboardController;
use App\Http\Controllers\Organizer\EventController as OrgEventController;
use App\Http\Controllers\Organizer\TicketTierController;
use App\Http\Controllers\Organizer\OrderController as OrgOrderController;
use App\Http\Controllers\Organizer\ScannerController;
use App\Http\Controllers\Admin\DashboardController as AdminDashboardController;
use App\Http\Controllers\Admin\CategoryController;
use App\Http\Controllers\Admin\EventController as AdminEventController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\ReportController;
use Illuminate\Support\Facades\Route;
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// PUBLIC
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/events', [EventController::class, 'index'])->name('events.index');
Route::get('/events/{slug}', [EventController::class, 'show'])->name('events.show');
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// AUTHENTICATED (any role)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Route::middleware('auth')->group(function () {
// Customer dashboard
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
// Checkout flow
Route::post('/checkout/{event}', [CheckoutController::class, 'store'])->name('checkout.store');
Route::get('/checkout/{order}/summary', [CheckoutController::class, 'summary'])->name('checkout.summary');
Route::post('/checkout/{order}/pay', [CheckoutController::class, 'pay'])->name('checkout.pay');
Route::get('/checkout/{order}/success', [CheckoutController::class, 'success'])->name('checkout.success');
// My tickets
Route::get('/my-tickets', [MyTicketsController::class, 'index'])->name('tickets.index');
Route::get('/my-tickets/{attendee}', [MyTicketsController::class, 'show'])->name('tickets.show');
Route::get('/my-tickets/{attendee}/pdf', [MyTicketsController::class, 'downloadPdf'])->name('tickets.pdf');
// Orders
Route::get('/orders', [OrdersController::class, 'index'])->name('orders.index');
Route::get('/orders/export/csv', [OrdersController::class, 'exportCsv'])->name('orders.export.csv');
Route::get('/orders/{order}', [OrdersController::class, 'show'])->name('orders.show');
Route::post('/orders/{order}/cancel', [OrdersController::class, 'cancel'])->name('orders.cancel');
// Profile (Breeze)
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// ORGANIZER
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Route::middleware(['auth', 'role:organizer,admin'])->prefix('organizer')->name('organizer.')->group(function () {
Route::get('/dashboard', [OrgDashboardController::class, 'index'])->name('dashboard');
// Event CRUD
Route::resource('events', OrgEventController::class)->except('show');
// Ticket Tiers (nested under event)
Route::post('/events/{event}/tiers', [TicketTierController::class, 'store'])->name('tiers.store');
Route::put('/events/{event}/tiers/{tier}', [TicketTierController::class, 'update'])->name('tiers.update');
Route::delete('/events/{event}/tiers/{tier}', [TicketTierController::class, 'destroy'])->name('tiers.destroy');
// Orders per event
Route::get('/events/{event}/orders', [OrgOrderController::class, 'index'])->name('events.orders');
Route::get('/events/{event}/orders/{order}', [OrgOrderController::class, 'show'])->name('events.orders.show');
Route::get('/events/{event}/export/csv', [OrgOrderController::class, 'exportCsv'])->name('events.export.csv');
// Scanner
Route::get('/scanner', [ScannerController::class, 'index'])->name('scanner');
Route::post('/scanner/check-in', [ScannerController::class, 'checkIn'])->name('scanner.checkin');
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// ADMIN
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/dashboard', [AdminDashboardController::class, 'index'])->name('dashboard');
// Users
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::patch('/users/{user}', [UserController::class, 'update'])->name('users.update');
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
// Categories
Route::get('/categories', [CategoryController::class, 'index'])->name('categories.index');
Route::post('/categories', [CategoryController::class, 'store'])->name('categories.store');
Route::patch('/categories/{category}', [CategoryController::class, 'update'])->name('categories.update');
Route::delete('/categories/{category}', [CategoryController::class, 'destroy'])->name('categories.destroy');
// Events
Route::get('/events', [AdminEventController::class, 'index'])->name('events.index');
Route::patch('/events/{event}', [AdminEventController::class, 'updateStatus'])->name('events.update');
// Reports
Route::get('/reports', [ReportController::class, 'index'])->name('reports');
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// AUTH (Breeze)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
require __DIR__.'/auth.php';
|