# Routes Module

## 1. Pengenalan

Module untuk manage route definitions dalam database. Boleh scan, sync, generate, bulk update routes. Berguna untuk mengurus routes tanpa perlu edit `web.php`.

## 2. Database

**Table:** `routes`

| Column | Type | Description |
|--------|------|-------------|
| id | bigint (PK) | Primary key |
| name | string (nullable) | Route name (contoh: `admin.home`) |
| uri | string | URI pattern (contoh: `/admin/home`) |
| method | string(255) | HTTP method (GET/POST/PUT/DELETE) |
| controller | string (nullable) | Controller class |
| action | string (nullable) | Controller method |
| middleware | text (nullable) | Middleware list |
| type | string(255) (default:'web') | Route type (web/api/admin) |
| status | boolean (default:true) | Active/inactive |
| alias | text (nullable) | Alternative names |
| deleted_at | timestamp (nullable) | Soft delete |
| timestamps | - | created_at, updated_at |

**Indexes:** name, uri, method, type, status, deleted_at, [type,status]

## 3. Routes

| Method | URI | Permission | Name |
|--------|-----|------------|------|
| GET | `/admin/routes` | `route.view` | `admin.routes.index` |
| GET | `/admin/routes/create` | `route.create` | `admin.routes.create` |
| POST | `/admin/routes` | `route.create` | `admin.routes.store` |
| GET | `/admin/routes/{id}/edit` | `route.update` | `admin.routes.edit` |
| PUT | `/admin/routes/{id}` | `route.update` | `admin.routes.update` |
| DELETE | `/admin/routes/{id}` | `route.delete` | `admin.routes.destroy` |
| POST | `/admin/routes/generate` | `route.create` | `admin.routes.generate` |
| GET | `/admin/routes/sync` | `route.create` | `admin.routes.sync` |
| GET | `/admin/routes/refresh` | `route.view` | `admin.routes.refresh` |
| GET | `/admin/routes/available` | `route.view` | `admin.routes.available` |
| POST | `/admin/routes/bulk-delete` | `route.delete` | `admin.routes.bulk_delete` |
| POST | `/admin/routes/bulk-status/{status}` | `route.update` | `admin.routes.bulk_status` |

## 4. Controller — `RouteController`

**Functions:**
- `index()` — List routes, filter by type/method/status, search, paginate.
- `create()` — Return create form.
- `store(Request)` — Save route manually.
- `edit($id)` — Return edit form.
- `update(Request, $id)` — Update route.
- `destroy($id)` — Delete route (soft delete).
- `generate()` — Scan Laravel routes + controllers, save to DB.
- `sync()` — Compare scanned routes vs DB registered routes.
- `refresh()` — Clear cache and rescan.
- `available()` — Show unregistered routes.
- `bulkDelete()` — Bulk delete multiple routes.
- `bulkStatus($status)` — Bulk activate/deactivate routes.

## 5. Model — `Route`

- Table: `routes`
- Soft Deletes
- Fillable: name, uri, method, controller, action, middleware, type, status, alias
- Casts: status (boolean)
- Scopes: web(), api(), admin(), active(), inactive()
- Static helpers: `methodColors()`, `typeColors()`, `statusColors()` untuk UI badges

## 6. Services

### `RouteScanner`
- Scan all registered Laravel routes
- Skip closures and excluded patterns
- Extract: name, uri, method, controller, action, middleware, type
- Determine type (web/api/admin) based on URI prefix & middleware

### `ControllerScanner`
- Recursively scan controller files
- Extract public methods, generate route data for resource methods
- Generate URIs from controller name (kebab-case) + method names
- Determine type from namespace (Admin/Api)

## 7. Views

- `index.blade.php` — Table: No, Route Name, URL, Method (colored badge), Controller, Type (colored badge), Status, Actions. Filters: search, type, method, status. Action buttons: Generate, Sync, Refresh, Available, Add Route.
- `create.blade.php` — Form: URI*, Route Name, HTTP Method, Type, Status, Controller, Action, Middleware, Alias.
- `edit.blade.php` — Same with pre-filled values.
- `available.blade.php` — Two columns: "Not Yet Registered" (red) vs "Already Registered" (green) with URIs + Generate button.

## 8. Permissions

| Permission | Description |
|------------|-------------|
| `route.view` | View route list |
| `route.create` | Create/generate routes |
| `route.update` | Edit routes |
| `route.delete` | Delete routes |
