L40 — Error Handling Deep (Production Patterns)

Ba module tương tác giúp bạn "chạm" vào những quyết định khó nhất khi xử lý error trong service production: 1) error nào map sang HTTP status nào (404 / 422 / 500 / 503); 2) retry với exponential backoff + jitter trông như thế nào trên timeline; 3) wrap chain thực sự "trông ra sao" khi đi qua 4 layer, và errors.As extract *AppError ở top.

1. Error category → HTTP status

Click một error type bên dưới — viz sẽ hiện status code, JSON response client thấy, và lý do vì sao đó là con số đúng. Mỗi error có một category (màu viền trái): Domain (lỗi nghiệp vụ — 4xx), Infrastructure (hạ tầng tạm hỏng — 5xx), Programming (bug — panic, recover thành 500).

Domain → 4xx, không retry Infrastructure → 5xx, retryable Programming → panic → 500
Chọn một error type ở trên để xem mapping.

2. Retry với exponential backoff + jitter

Animate timeline retry: mỗi attempt fail → ngủ baseDelay × 2^(attempt-1) (cap ở maxDelay) với jitter ±50%. Chọn kịch bản fail (mấy attempt đầu thất bại trước khi thành công) để thấy hành vi. Lưu ý: VALIDATION (domain error) sẽ bị từ chối retry ngay attempt 1.

Chưa chạy. Nhấn ▶ Chạy timeline.
[chờ chạy...]

3. Error wrap chain — đường đi qua 4 layer + errors.As

Một error đi từ DB driver → Repo → Service → HTTP handler. Mỗi layer wrap thêm context của riêng nó. Top-of-stack (middleware) dùng errors.As để extract *AppError ở giữa chain. Chọn cách wrap dưới đây để so sánh GOOD vs BAD và xem extract có thành công không.

[chưa chạy]
[chưa chạy]