initial: project state before operator dashboard card redesign
This commit is contained in:
commit
e0aed8eed7
113 files changed
+20074
No files matched your search
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('v1')->group(function () {
|
||||
Route::apiResource('parking-lots', \App\Http\Controllers\Api\ParkingLotController::class);
|
||||
Route::get('parking-lots/search', [\App\Http\Controllers\Api\ParkingLotController::class, 'search']);
|
||||
Route::get('parking-lots/{parkingLot}/status', [\App\Http\Controllers\Api\ParkingLotController::class, 'status']);
|
||||
Route::post('car-registries', [\App\Http\Controllers\Api\CarRegistryController::class, 'checkIn']);
|
||||
Route::put('car-registries/{carRegistry}/exit', [\App\Http\Controllers\Api\CarRegistryController::class, 'checkOut']);
|
||||
Route::post('bookings', \App\Http\Controllers\Api\BookingController::class);
|
||||
Route::get('bookings', [\App\Http\Controllers\Api\BookingController::class, 'index']);
|
||||
});
|
||||
?>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\User;
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('login', function () {
|
||||
return view('auth.login');
|
||||
})->name('login');
|
||||
|
||||
Route::get('register', function () {
|
||||
return view('auth.register');
|
||||
})->name('register');
|
||||
|
||||
Route::post('register', function (Request $request) {
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|email|unique:users,email',
|
||||
'password' => 'required|confirmed|min:8',
|
||||
]);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'role' => 'user', // default
|
||||
]);
|
||||
|
||||
Auth::login($user);
|
||||
return redirect('/dashboard');
|
||||
})->name('register.action');
|
||||
|
||||
Route::post('login', function (Request $request) {
|
||||
$credentials = $request->validate([
|
||||
'email' => ['required', 'email'],
|
||||
'password' => ['required'],
|
||||
]);
|
||||
|
||||
if (Auth::attempt($credentials, $request->boolean('remember'))) {
|
||||
$request->session()->regenerate();
|
||||
$role = Auth::user()->role;
|
||||
$intended = match($role) {
|
||||
'admin' => '/admin/dashboard',
|
||||
'operator' => '/operator/dashboard',
|
||||
default => '/dashboard',
|
||||
};
|
||||
return redirect()->intended($intended);
|
||||
}
|
||||
|
||||
return back()->withErrors([
|
||||
'email' => 'بيانات الدخول غير صحيحة.',
|
||||
]);
|
||||
})->name('login.action');
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::post('logout', function (Request $request) {
|
||||
Auth::logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
return redirect('/');
|
||||
})->name('logout');
|
||||
});
|
||||
?>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
use App\Http\Controllers\Admin\DashboardController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
|
||||
Route::get('/', [App\Http\Controllers\ParkingController::class, 'index'])->name('parking.index');
|
||||
require __DIR__.'/auth.php';
|
||||
|
||||
// User profile & reservations (authenticated users)
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/profile', [ProfileController::class, 'show'])->name('profile.show');
|
||||
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
Route::patch('/profile/password', [ProfileController::class, 'updatePassword'])->name('profile.password');
|
||||
Route::get('/dashboard', [ProfileController::class, 'dashboard'])->name('user.dashboard');
|
||||
});
|
||||
|
||||
// Admin Dashboard routes (protected - uncomment auth middleware for production)
|
||||
// Route::middleware(['auth:sanctum'])->prefix('admin')->name('admin.')->group(function () {
|
||||
Route::prefix('admin')->middleware('admin')->name('admin.')->group(function () {
|
||||
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||
Route::get('/stats', [DashboardController::class, 'statsJson'])->name('stats');
|
||||
Route::get('/charts', [DashboardController::class, 'chartsJson'])->name('charts');
|
||||
|
||||
// Parking Lots CRUD
|
||||
Route::get('/parking-lots', [\App\Http\Controllers\Admin\ParkingLotController::class, 'index'])->name('parking-lots.index');
|
||||
Route::get('/parking-lots/{parkingLot}', [\App\Http\Controllers\Admin\ParkingLotController::class, 'show'])->name('parking-lots.show');
|
||||
Route::post('/parking-lots', [\App\Http\Controllers\Admin\ParkingLotController::class, 'store'])->name('parking-lots.store');
|
||||
Route::put('/parking-lots/{parkingLot}', [\App\Http\Controllers\Admin\ParkingLotController::class, 'update'])->name('parking-lots.update');
|
||||
Route::post('/parking-lots/{parkingLot}/toggle', [\App\Http\Controllers\Admin\ParkingLotController::class, 'toggleStatus'])->name('parking-lots.toggle');
|
||||
|
||||
// Active Bookings
|
||||
Route::get('/bookings/active', [\App\Http\Controllers\Admin\BookingController::class, 'activeIndex'])->name('bookings.active');
|
||||
Route::post('/bookings/{booking}/complete', [\App\Http\Controllers\Admin\BookingController::class, 'completeBooking'])->name('bookings.complete');
|
||||
});
|
||||
// });
|
||||
|
||||
// Operator Dashboard
|
||||
Route::prefix('operator')->middleware('operator')->name('operator.')->group(function () {
|
||||
Route::get('/dashboard', [\App\Http\Controllers\Operator\OperatorController::class, 'dashboard'])->name('dashboard');
|
||||
Route::post('/check-in', [\App\Http\Controllers\Operator\OperatorController::class, 'checkIn'])->name('checkIn');
|
||||
Route::post('/{booking}/activate', [\App\Http\Controllers\Operator\OperatorController::class, 'activateReservation'])->name('activate');
|
||||
Route::get('/{booking}/checkout-preview', [\App\Http\Controllers\Operator\OperatorController::class, 'checkoutPreview'])->name('checkoutPreview');
|
||||
Route::post('/{booking}/payment', [\App\Http\Controllers\Operator\OperatorController::class, 'processPayment'])->name('payment');
|
||||
Route::post('/{booking}/checkout', [\App\Http\Controllers\Operator\OperatorController::class, 'checkOut'])->name('checkOut');
|
||||
});
|
||||
|
||||
// });
|
||||
|
||||
/*
|
||||
To enable auth:
|
||||
1. php artisan make:middleware AdminAuth or use existing auth:sanctum
|
||||
2. Uncomment Route::middleware(['auth:sanctum'])
|
||||
3. Add super admin user/guard.
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user