# CHƯƠNG 5: BẢO TRÌ & MỞ RỘNG

Cách duy trì và phát triển

# Trang 1: Xử lý lỗi & Recovery chuyên sâu

Hệ thống sử dụng `ExternalApiClient` làm trung tâm điều phối. Nếu bạn muốn thay đổi logic xử lý khi Backend gặp lỗi:

1. **Thay đổi số lần thử lại**: Sửa `maxAttempts` trong `@Retryable`.
2. **Sửa logic trả về mặc định**: Cập nhật các phương thức `@Recover`. Ví dụ, bạn có thể gửi cảnh báo qua Telegram/Email nếu tất cả 3 lần thử lại đều thất bại.

# Trang 2: Hướng dẫn thêm Endpoint Proxy mới

Để thêm một đường dẫn Proxy mới vào hệ thống, hãy thực hiện 3 bước:

1. **Bước 1 (Controller)**: Tạo phương thức mới trong `SigningProxyController` hoặc `ExternalProxyController` để đón nhận request.
2. **Bước 2 (Service)**: Định nghĩa interface và triển khai forwarding.
3. **Bước 3 (Client)**: Sử dụng `WebClient` trong `ExternalApiClient` để gọi tới URL backend mới.

### Ví dụ thêm API lấy thông tin Server:

```java
// Trong ExternalApiClient.java
public ResponseEntity<String> callNewApi() {
    return webClient.get()
            .uri(baseUrl + "/api/v1/info")
            .retrieve()
            .toEntity(String.class)
            .block();
}
```

# Trang 3: Check-list bàn giao cho Dev tiếp quản

- Kiểm tra file `application.yml` đã đúng URL của môi trường mới chưa.
- Bật `logging.level.com.example=DEBUG` để kiểm tra các request đầu tiên.
- Đảm bảo cổng Port (8080) không bị chiếm dụng bởi ứng dụng khác.
- Xác nhận Client đã gửi Header `Token-Signing` (cần thiết).