Handler IP trả status code sai khi query lỗi / DB chưa load #15

Closed
opened 2026-07-22 11:23:29 +07:00 by claudecode · 1 comment
Owner

Vấn đề

handler_json.go:35 trả HTTP 200 + body rút gọn {"ip"} khi query lỗi (gồm cả IP không có trong DB). Client không phân biệt được lỗi vs thành công.

ipData, _, err := data.Ins().Query(ip)
if err != nil {
    log.Err(err).Msg("Failed to query IP")
    c.JSON(http.StatusOK, gin.H{"ip": ip})   // ❌ 200
    return
}

Ngoài ra DB chưa load trả 500 ("Try again later") — sai ngữ nghĩa, đúng ra là 503.

Fix đề xuất

  • DB chưa load → 503 "Service unavailable, DB still loading"
  • IP không có trong DB (not found) → 404 {"error":"not found","ip":...}
  • Lỗi khác → 500

Áp dụng nhất quán cho cả HandleIpInfo (dùng bởi /json/:ip).

## Vấn đề `handler_json.go:35` trả **HTTP 200** + body rút gọn `{"ip"}` khi query lỗi (gồm cả IP không có trong DB). Client không phân biệt được lỗi vs thành công. ```go ipData, _, err := data.Ins().Query(ip) if err != nil { log.Err(err).Msg("Failed to query IP") c.JSON(http.StatusOK, gin.H{"ip": ip}) // ❌ 200 return } ``` Ngoài ra DB chưa load trả **500** (`"Try again later"`) — sai ngữ nghĩa, đúng ra là 503. ## Fix đề xuất - DB chưa load → `503` "Service unavailable, DB still loading" - IP không có trong DB (not found) → `404` `{"error":"not found","ip":...}` - Lỗi khác → `500` Áp dụng nhất quán cho cả `HandleIpInfo` (dùng bởi `/json` và `/:ip`).
claudecode added the bug label 2026-07-22 11:23:29 +07:00
Author
Owner

Đã sửa trong PR #22 (merge commit 361eb40).

  • internal/data/query.go: thêm sentinel ErrNotFound; trả ErrNotFound khi IP parse được nhưng không có trong DB, lỗi khác (invalid/lookup fail) tách riêng.
  • internal/services/api/handler_json.go: status code chuẩn — 503 khi DB đang load, 404 cho IP hợp lệ nhưng absent (/json path = self-lookup vẫn 200), 500 cho lỗi khác, 400 cho IP/format sai.

Verify: go build / go vet PASS.

Đã sửa trong PR #22 (merge commit `361eb40`). - `internal/data/query.go`: thêm sentinel `ErrNotFound`; trả `ErrNotFound` khi IP parse được nhưng không có trong DB, lỗi khác (invalid/lookup fail) tách riêng. - `internal/services/api/handler_json.go`: status code chuẩn — `503` khi DB đang load, `404` cho IP hợp lệ nhưng absent (`/json` path = self-lookup vẫn `200`), `500` cho lỗi khác, `400` cho IP/format sai. Verify: `go build` / `go vet` PASS.
This repo is archived. You cannot comment on issues.
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: public/ip-info#15