From 01a7f33054a4257804c4ed2141832f787d3c4c87 Mon Sep 17 00:00:00 2001 From: Gabriel De Los Rios Date: Sun, 2 Nov 2025 22:39:04 -0300 Subject: [PATCH] refactor: add field to APIError struct --- docs/docs.go | 5 +++++ docs/swagger.json | 5 +++++ docs/swagger.yaml | 4 ++++ internal/handler/contact_handler.go | 12 +++++++++--- internal/handler/response.go | 2 ++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 4a3de6d..4e53465 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -303,6 +303,11 @@ const docTemplate = `{ "description": "Additional error details", "type": "string" }, + "field": { + "description": "Field name if applicable", + "type": "string", + "example": "name" + }, "message": { "description": "Human-readable error message", "type": "string" diff --git a/docs/swagger.json b/docs/swagger.json index 7c84457..9df2213 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -297,6 +297,11 @@ "description": "Additional error details", "type": "string" }, + "field": { + "description": "Field name if applicable", + "type": "string", + "example": "name" + }, "message": { "description": "Human-readable error message", "type": "string" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index f7f5fc2..f1d208c 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -8,6 +8,10 @@ definitions: details: description: Additional error details type: string + field: + description: Field name if applicable + example: name + type: string message: description: Human-readable error message type: string diff --git a/internal/handler/contact_handler.go b/internal/handler/contact_handler.go index 01f84f6..0b560c4 100644 --- a/internal/handler/contact_handler.go +++ b/internal/handler/contact_handler.go @@ -97,17 +97,23 @@ func (h *ContactHandler) create(w http.ResponseWriter, r *http.Request) { } if contact.Name == "" { - BadRequest(w, ErrMissingRequired, RequiredFieldErr("name")) + err := ErrMissingRequired + err.Field = "name" + BadRequest(w, err, RequiredFieldErr("name")) return } if contact.Company == "" { - BadRequest(w, ErrMissingRequired, RequiredFieldErr("company")) + err := ErrMissingRequired + err.Field = "company" + BadRequest(w, err, RequiredFieldErr("company")) return } if contact.Phone == "" { - BadRequest(w, ErrMissingRequired, RequiredFieldErr("phone")) + err := ErrMissingRequired + err.Field = "phone" + BadRequest(w, err, RequiredFieldErr("phone")) return } diff --git a/internal/handler/response.go b/internal/handler/response.go index 2e6c3e0..d256ec6 100644 --- a/internal/handler/response.go +++ b/internal/handler/response.go @@ -23,6 +23,8 @@ type APIError struct { Message string `json:"message"` // Additional error details Details string `json:"details,omitempty"` + // Field name if applicable + Field string `json:"field,omitempty" example:"name"` } const content_type = "Content-Type"