This commit is contained in:
2026-07-21 23:39:19 +02:00
commit b33b217bdb
217 changed files with 32076 additions and 0 deletions

75
src/routes/web.php Normal file
View File

@@ -0,0 +1,75 @@
<?php
use App\Livewire\Admin\Panel as AdminPanel;
use App\Livewire\Auth\Login;
use App\Livewire\Client\Dashboard as ClientDashboard;
use App\Livewire\Client\NewTicket as ClientNewTicket;
use App\Livewire\Client\TicketShow as ClientTicketShow;
use App\Livewire\Landing;
use App\Livewire\Operator\NewTicket as OperatorNewTicket;
use App\Livewire\Operator\Queue as OperatorQueue;
use App\Livewire\Operator\Stats as OperatorStats;
use App\Livewire\Operator\TicketShow as OperatorTicketShow;
use App\Models\Ticket;
use App\Support\Settings;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
Route::get('/', Landing::class)->name('landing');
Route::get('/manifest.webmanifest', function () {
return response()->json([
'name' => Settings::get('company_name'),
'short_name' => Settings::get('company_name'),
'start_url' => '/',
'scope' => '/',
'display' => 'standalone',
'background_color' => '#f3f5fe',
'theme_color' => Settings::accentColor(),
'lang' => 'pl',
'icons' => [
['src' => asset('pwa-icons/icon-192.png'), 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'any'],
['src' => asset('pwa-icons/icon-512.png'), 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'any'],
['src' => asset('pwa-icons/icon-192-maskable.png'), 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'maskable'],
['src' => asset('pwa-icons/icon-512-maskable.png'), 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'maskable'],
],
])->header('Content-Type', 'application/manifest+json');
})->name('manifest');
Route::get('/login', Login::class)->middleware('guest')->name('login');
Route::post('/logout', function () {
Auth::logout();
request()->session()->invalidate();
request()->session()->regenerateToken();
return redirect('/');
})->middleware('auth')->name('logout');
Route::middleware(['auth', 'role:client'])->prefix('client')->name('client.')->group(function () {
Route::get('/', ClientDashboard::class)->name('dashboard');
Route::get('/new', ClientNewTicket::class)->name('new');
Route::get('/tickets/{ticket}', ClientTicketShow::class)->name('ticket');
});
Route::middleware(['auth', 'role:operator'])->prefix('operator')->name('operator.')->group(function () {
Route::get('/', OperatorQueue::class)->name('queue');
Route::get('/new', OperatorNewTicket::class)->name('new');
Route::get('/stats', OperatorStats::class)->name('stats');
Route::get('/tickets/{ticket}', OperatorTicketShow::class)->name('ticket');
// Fired via navigator.sendBeacon on tab/browser close (see the
// MONITOR CZASU PRACY widget in ticket-show.blade.php) — a plain
// Livewire call can't be relied on to complete once the page is
// actually unloading, and sendBeacon needs a normal endpoint to hit.
// Excluded from CSRF verification in bootstrap/app.php since a beacon
// request can't carry the token header.
Route::post('/tickets/{ticket}/stop-timer', function (Ticket $ticket) {
$ticket->stopTimer();
return response()->noContent();
})->name('ticket.stop-timer');
});
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/', AdminPanel::class)->name('panel');
});