Module 6 – Admin Side (පරිපාලක පැනලය)

මේ කොටසේදී, අපි පරිශීලකයින්ගෙන් ලැබෙන ඇණවුම් (orders) කළමනාකරණය කිරීමට Admin කෙනෙකුට අවශ්‍ය Dashboard එක සහ ඒ හා සම්බන්ධ λειτουργίες නිර්මාණය කරනවා.


පියවර 1: Admin Role එකක් සෑදීම 👨‍💼

Admin කෙනෙක් සාමාන්‍ය user කෙනෙකුගෙන් වෙන් කර හඳුනාගැනීමට අපිට ක්‍රමයක් අවශ්‍යයි. සරලම ක්‍රමය තමයි `users` table එකට `role` නමින් අලුත් column එකක් එකතු කිරීම. ඒ සඳහා අපි අලුත් migration file එකක් හදමු.

php artisan make:migration add_role_to_users_table --table=users

දැන් `database/migrations/` තුළ අලුතින් සෑදුනු file එකේ `up()` function එකට ගොස් `role` column එක එකතු කරන්න.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('role')->default('user'); // 'user' or 'admin'
    });
}

දැන් migrate command එක run කර database එක update කරගන්න.

php artisan migrate

පියවර 2: Admin Account එකක් සෑදීම

අපි දැන් admin account එකක් හදාගමු. දැනටමත් ඔබ register වී ඇති user කෙනෙක්ව අපි admin කරමු. phpMyAdmin වෙත ගොස් `users` table එකේ ඇති ඔබේ user ගේ `role` column එකේ අගය 'user' සිට 'admin' ලෙස වෙනස් කරන්න.


පියවර 3: Admin Middleware එකක් සෑදීම 🛡️

Admin ට අදාල පිටු සාමාන්‍ය user කෙනෙකුට access කරන්න බැරි වෙන්න අපි ආරක්ෂාවක් යොදන්න ඕන. මේ සඳහා **Middleware** එකක් භාවිත කරනවා. Middleware එකක් කියන්නේ route එකකට access කරන්න කලින් request එක check කරන filter එකක් වගේ.

Middleware එකක් හදාගන්න මේ command එක run කරන්න.

php artisan make:middleware IsAdminMiddleware

දැන් `app/Http/Middleware/IsAdminMiddleware.php` file එකේ `handle()` function එකට ගොස්, user admin ද කියා check කරන logic එක ලියන්න.

public function handle(Request $request, Closure $next)
{
    if (auth()->check() && auth()->user()->role == 'admin') {
        return $next($request);
    }
    return redirect('/home')->with('error', 'You do not have admin access.');
}

අවසානයේ, මේ middleware එක `app/Http/Kernel.php` file එකේ `$routeMiddleware` array එකට register කරන්න.

protected $routeMiddleware = [
    // ... other middleware
    'admin' => \App\Http\Middleware\IsAdminMiddleware::class,
];

පියවර 4: Admin Routes සහ Controller සෑදීම ⚙️

Admin dashboard එකට අදාල routes ටික අපි හදාගමු. මේවා අපි අර හදාගත් 'admin' middleware එකෙන් ආරක්ෂා කරමු. මුලින්ම controller එක හදමු.

php artisan make:controller Admin/OrderController

දැන් `routes/web.php` file එකට ගොස් මේ routes ටික එකතු කරන්න.

use App\Http\Controllers\Admin\OrderController as AdminOrderController;

Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
    Route::get('/orders', [AdminOrderController::class, 'index'])->name('orders.index');
    Route::post('/orders/{order}/update', [AdminOrderController::class, 'update'])->name('orders.update');
});

පියවර 5: Admin Dashboard එක සහ Orders Approve/Reject කිරීම 📋

දැන් අපි `Admin/OrderController.php` එකේ `index()` function එකට ගොස්, සියලුම orders fetch කරන logic එක ලියමු.

use App\Models\Order;

public function index()
{
    $orders = Order::with(['user', 'pizza'])->latest()->get();
    return view('admin.orders.index', compact('orders'));
}

`resources/views/` තුළ `admin/orders` ලෙස folders සාදා, ඒ තුළ `index.blade.php` file එක සාදන්න. එයට පහත code එක යොදන්න.

<h2>All Customer Orders</h2>
<table class="table">
    <thead>
        <tr>
            <th>User</th>
            <th>Pizza</th>
            <th>Quantity</th>
            <th>Status</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach ($orders as $order)
        <tr>
            <td>{{ $order->user->name }}</td>
            <td>{{ $order->pizza->name }}</td>
            <td>{{ $order->quantity }}</td>
            <td>{{ $order->status }}</td>
            <td>
                @if($order->status == 'Pending')
                <form action="{{ route('admin.orders.update', $order) }}" method="POST" class="d-inline">
                    @csrf
                    <input type="hidden" name="status" value="Approved">
                    <button type="submit" class="btn btn-success btn-sm">Approve</button>
                </form>
                <form action="{{ route('admin.orders.update', $order) }}" method="POST" class="d-inline">
                    @csrf
                    <input type="hidden" name="status" value="Rejected">
                    <button type="submit" class="btn btn-danger btn-sm">Reject</button>
                </form>
                @endif
            </td>
        </tr>
        @endforeach
    </tbody>
</table>

අවසාන වශයෙන් `Admin/OrderController.php` හි `update()` function එකට ගොස් status එක update කරන logic එක ලියන්න.

use Illuminate\Http\Request;

public function update(Request $request, Order $order)
{
    $request->validate(['status' => 'required|in:Approved,Rejected']);
    $order->update(['status' => $request->status]);
    return back()->with('success', 'Order status updated successfully.');
}

දැන් admin ලෙස login වී `/admin/orders` URL එකට ගොස් බලන්න! ඔබට සියලුම orders බලා ඒවා approve හෝ reject කිරීමට හැකි වේවි.


නියමයි! දැන් අපේ application එකේ සම්පූර්ණ Admin Panel එකක් තියෙනවා. ඊළඟ කොටසින් අපි මේ සියල්ල තවත් ඔපමට්ටම් කරමු.

« පෙර පාඩම: User Side (Ordering) ඊළඟ පාඩම: Order Management & Styling »