# Hướng Dẫn Cập Nhật Routes API

## Tóm Tắt

File `routes/api.php` hiện tại có **~100+ routes** sử dụng cú pháp cũ (string notation) và **3 controllers không tồn tại**. Cần cập nhật toàn bộ sang Laravel 8+ syntax.

---

## Các Bước Thực Hiện

### Bước 1: Backup File Hiện Tại

```bash
cp routes/api.php routes/api.php.backup
```

### Bước 2: Thay Thế Import Section

**Xóa phần import cũ (dòng 1-30) và thay bằng:**

```php
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

// API Controllers
use App\Http\Controllers\Api\BlockedUserController;
use App\Http\Controllers\Api\BlogController;
use App\Http\Controllers\Api\CommentController;
use App\Http\Controllers\Api\ContactController;
use App\Http\Controllers\Api\DueOrderController;
use App\Http\Controllers\Api\FeedbackController;
use App\Http\Controllers\Api\GiftController;
use App\Http\Controllers\Api\GOVReport;
use App\Http\Controllers\Api\IndexController;
use App\Http\Controllers\Api\LikeController;
use App\Http\Controllers\Api\NotifyController;
use App\Http\Controllers\Api\OrderController;
use App\Http\Controllers\Api\PageController;
use App\Http\Controllers\Api\PendingController;
use App\Http\Controllers\Api\PostController;
use App\Http\Controllers\Api\PreFilterRECSController;
use App\Http\Controllers\Api\ProductController;
use App\Http\Controllers\Api\QuizzController;
use App\Http\Controllers\Api\RetailOrderCartController;
use App\Http\Controllers\Api\RetailOrderController;
use App\Http\Controllers\Api\RetailPaymentUserController;
use App\Http\Controllers\Api\RetailWarehouseController;
use App\Http\Controllers\Api\RetailWarehousePackController;
use App\Http\Controllers\Api\RetailWarehouseShipController;
use App\Http\Controllers\Api\ServiceController;
use App\Http\Controllers\Api\SettingController;
use App\Http\Controllers\Api\TasksController;
use App\Http\Controllers\Api\UploadController;
use App\Http\Controllers\Api\UserAttendanceController;
use App\Http\Controllers\Api\UserCodeController;
use App\Http\Controllers\Api\UserController;
use App\Http\Controllers\Api\UserProfileController;
use App\Http\Controllers\Api\WarehousesController;
use App\Http\Controllers\Api\Riha\VoucherController;
use App\Http\Controllers\Admin\Product\ProductController as AdminProductController;
```

### Bước 3: Tìm và Thay Thế String Notation

Sử dụng Find & Replace trong editor (Ctrl+H hoặc Cmd+H):

#### 3.1. ProductController
```
Tìm: 'Api\ProductController@
Thay: [ProductController::class, '
```

#### 3.2. UserController
```
Tìm: 'Api\UserController@
Thay: [UserController::class, '
```

#### 3.3. QuizzController
```
Tìm: 'Api\QuizzController@
Thay: [QuizzController::class, '
```

#### 3.4. NotifyController
```
Tìm: 'Api\NotifyController@
Thay: [NotifyController::class, '
```

#### 3.5. PreFilterRECSController
```
Tìm: 'Api\PreFilterRECSController@
Thay: [PreFilterRECSController::class, '
```

#### 3.6. PendingController
```
Tìm: 'Api\PendingController@
Thay: [PendingController::class, '
```

#### 3.7. BlockedUserController
```
Tìm: 'Api\BlockedUserController@
Thay: [BlockedUserController::class, '
```

#### 3.8. BlogController
```
Tìm: 'Api\BlogController@
Thay: [BlogController::class, '
```

#### 3.9. ServiceController
```
Tìm: 'Api\ServiceController@
Thay: [ServiceController::class, '
```

#### 3.10. GiftController
```
Tìm: 'Api\GiftController@
Thay: [GiftController::class, '
```

#### 3.11. FeedbackController
```
Tìm: 'Api\FeedbackController@
Thay: [FeedbackController::class, '
```

#### 3.12. LikeController
```
Tìm: 'Api\LikeController@
Thay: [LikeController::class, '
```

#### 3.13. CommentController
```
Tìm: 'Api\CommentController@
Thay: [CommentController::class, '
```

#### 3.14. IndexController
```
Tìm: 'Api\IndexController@
Thay: [IndexController::class, '
```

#### 3.15. TasksController
```
Tìm: 'Api\TasksController@
Thay: [TasksController::class, '
```

#### 3.16. DueOrderController
```
Tìm: 'Api\DueOrderController@
Thay: [DueOrderController::class, '
```

#### 3.17. RetailOrderController
```
Tìm: 'Api\RetailOrderController@
Thay: [RetailOrderController::class, '
```

#### 3.18. RetailWarehouseController
```
Tìm: 'Api\RetailWarehouseController@
Thay: [RetailWarehouseController::class, '
```

#### 3.19. RetailWarehousePackController
```
Tìm: 'Api\RetailWarehousePackController@
Thay: [RetailWarehousePackController::class, '
```

#### 3.20. RetailWarehouseShipController
```
Tìm: 'Api\RetailWarehouseShipController@
Thay: [RetailWarehouseShipController::class, '
```

#### 3.21. OrderController
```
Tìm: 'Api\OrderController@
Thay: [OrderController::class, '
```

#### 3.22. UploadController
```
Tìm: 'Api\UploadController@
Thay: [UploadController::class, '
```

#### 3.23. SettingController
```
Tìm: 'Api\SettingController@
Thay: [SettingController::class, '
```

#### 3.24. PageController
```
Tìm: 'Api\PageController@
Thay: [PageController::class, '
```

#### 3.25. Admin ProductController
```
Tìm: 'Admin\Product\ProductController@
Thay: [AdminProductController::class, '
```

### Bước 4: Comment Routes Không Tồn Tại

Tìm và comment các đoạn sau:

#### 4.1. IotController Routes
```php
// TODO: IotController không tồn tại - cần tạo controller hoặc xóa routes
// Route::prefix('iots')->group(function () {
//     Route::get('/', [IotController::class, 'index'])->name('iots.index');
//     Route::post('/send', [IotController::class, 'send'])->name('iots.send');
// });
```

#### 4.2. RetailConfirmController Routes
```php
// TODO: RetailConfirmController không tồn tại - cần tạo controller hoặc xóa routes
// Route::prefix('/retail-order')->group(function () {
//     Route::get('/search', [RetailConfirmController::class, 'search']);
//     Route::post('/is_check/{id}', [RetailConfirmController::class, 'is_check']);
//     Route::post('/is_invoice/{id}', [RetailConfirmController::class, 'is_invoice']);
//     Route::post('/storePaymentUsers', [RetailPaymentUserController::class, 'store']);
// });
```

**Lưu ý:** Giữ lại route `storePaymentUsers` vì controller tồn tại, chỉ di chuyển ra ngoài group.

#### 4.3. AddLocationsController Route
```php
// TODO: AddLocationsController không tồn tại - cần tạo controller hoặc xóa route
// Route::post('/locations/import', [AddLocationsController::class, 'import']);
```

### Bước 5: Di Chuyển Route storePaymentUsers

Thêm route này vào nhóm `retailOrder` hoặc tạo group riêng:

```php
// Di chuyển từ retail-order group (đã comment) sang đây
Route::post('/retail-order/storePaymentUsers', [RetailPaymentUserController::class, 'store']);
```

### Bước 6: Kiểm Tra Syntax

```bash
php artisan route:list
```

Nếu có lỗi, kiểm tra:
- Dấu ngoặc đơn `'` và `]` có khớp không
- Import controllers có đầy đủ không
- Tên class có đúng không

### Bước 7: Clear Cache

```bash
php artisan route:clear
php artisan route:cache
php artisan config:clear
```

---

## Script Tự Động (PowerShell)

Tạo file `update-routes.ps1`:

```powershell
# Backup
Copy-Item routes/api.php routes/api.php.backup

$content = Get-Content routes/api.php -Raw -Encoding UTF8

# Replace string notation với class notation
$replacements = @{
    "'Api\\ProductController@" = "[ProductController::class, '"
    "'Api\\UserController@" = "[UserController::class, '"
    "'Api\\QuizzController@" = "[QuizzController::class, '"
    "'Api\\NotifyController@" = "[NotifyController::class, '"
    "'Api\\PreFilterRECSController@" = "[PreFilterRECSController::class, '"
    "'Api\\PendingController@" = "[PendingController::class, '"
    "'Api\\BlockedUserController@" = "[BlockedUserController::class, '"
    "'Api\\BlogController@" = "[BlogController::class, '"
    "'Api\\ServiceController@" = "[ServiceController::class, '"
    "'Api\\GiftController@" = "[GiftController::class, '"
    "'Api\\FeedbackController@" = "[FeedbackController::class, '"
    "'Api\\LikeController@" = "[LikeController::class, '"
    "'Api\\CommentController@" = "[CommentController::class, '"
    "'Api\\IndexController@" = "[IndexController::class, '"
    "'Api\\TasksController@" = "[TasksController::class, '"
    "'Api\\DueOrderController@" = "[DueOrderController::class, '"
    "'Api\\RetailOrderController@" = "[RetailOrderController::class, '"
    "'Api\\RetailWarehouseController@" = "[RetailWarehouseController::class, '"
    "'Api\\RetailWarehousePackController@" = "[RetailWarehousePackController::class, '"
    "'Api\\RetailWarehouseShipController@" = "[RetailWarehouseShipController::class, '"
    "'Api\\OrderController@" = "[OrderController::class, '"
    "'Api\\UploadController@" = "[UploadController::class, '"
    "'Api\\SettingController@" = "[SettingController::class, '"
    "'Api\\PageController@" = "[PageController::class, '"
    "'Admin\\Product\\ProductController@" = "[AdminProductController::class, '"
}

foreach ($pattern in $replacements.Keys) {
    $replacement = $replacements[$pattern]
    $content = $content -replace [regex]::Escape($pattern), $replacement
}

[System.IO.File]::WriteAllText((Resolve-Path "routes/api.php").Path, $content, [System.Text.UTF8Encoding]::new($false))

Write-Host "✅ Routes updated successfully!"
Write-Host "⚠️  Remember to:"
Write-Host "   1. Update import section manually"
Write-Host "   2. Comment routes for non-existent controllers"
Write-Host "   3. Run: php artisan route:list"
```

Chạy script:
```powershell
.\update-routes.ps1
```

---

## Kiểm Tra Sau Khi Cập Nhật

### 1. Kiểm Tra Routes
```bash
php artisan route:list | grep "Api\\"
```
Không nên có kết quả nào (tất cả đã chuyển sang class notation)

### 2. Test API Endpoints
```bash
# Test một vài endpoints quan trọng
curl http://localhost/api/v1.0/product/list
curl http://localhost/api/v1.0/user/login -X POST
```

### 3. Chạy Tests
```bash
php artisan test
```

---

## Tổng Kết

- ✅ **~100+ routes** cần cập nhật
- ✅ **25+ controllers** cần import
- ✅ **3 controllers** không tồn tại cần xử lý
- ✅ **6 routes** cần comment/xóa

**Thời gian ước tính:** 30-60 phút

**Lợi ích:**
- Code hiện đại hơn (Laravel 8+)
- IDE hỗ trợ tốt hơn
- Dễ maintain và debug
- Phát hiện lỗi sớm hơn

---

**Người hướng dẫn:** Kiro AI  
**Ngày:** 6 tháng 5, 2026
