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)iferr!=nil{log.Err(err).Msg("Failed to query IP")c.JSON(http.StatusOK,gin.H{"ip":ip})// ❌ 200return}
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).
## 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
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Vấn đề
handler_json.go:35trả 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.Ngoài ra DB chưa load trả 500 (
"Try again later") — sai ngữ nghĩa, đúng ra là 503.Fix đề xuất
503"Service unavailable, DB still loading"404{"error":"not found","ip":...}500Áp dụng nhất quán cho cả
HandleIpInfo(dùng bởi/jsonvà/:ip).Đã sửa trong PR #22 (merge commit
361eb40).internal/data/query.go: thêm sentinelErrNotFound; trảErrNotFoundkhi 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 —503khi DB đang load,404cho IP hợp lệ nhưng absent (/jsonpath = self-lookup vẫn200),500cho lỗi khác,400cho IP/format sai.Verify:
go build/go vetPASS.