Fix error response documentation for field attribute

Separated ErrorResponse and ValidationErrorResponse types:
- ErrorResponse: general errors (401, 403, 404, 500) - no field attribute
- ValidationErrorResponse: form validation errors (400) - includes field attribute

Updated respondValidationError to return appropriate type based on error format.
Updated Swagger documentation to use ValidationErrorResponse only for validation endpoints.

This ensures the field attribute only appears in API responses for actual form field validation errors, not in general error responses.
This commit is contained in:
2025-11-28 18:05:25 +01:00
parent 8d631f8fab
commit 6fb4823183
3 changed files with 14 additions and 7 deletions
@@ -96,7 +96,7 @@ type LogoutRequest struct {
// @Produce json
// @Param request body RegisterRequest true "Registration data (password requires: min 8 chars, uppercase, lowercase, digit, special char)"
// @Success 201 {object} RegisterResponse "Returns user ID and message about next steps"
// @Failure 400 {object} ErrorResponse "Invalid input: email format, password requirements, or timezone"
// @Failure 400 {object} ValidationErrorResponse "Invalid input: email format, password requirements, or timezone"
// @Failure 403 {object} ErrorResponse "Registration is closed"
// @Failure 409 {object} ErrorResponse "Email already registered"
// @Failure 500 {object} ErrorResponse "Internal server error"
+6 -2
View File
@@ -85,6 +85,10 @@ type HabitEntriesResponse struct {
}
type ErrorResponse struct {
Error string `json:"error"`
Field *string `json:"field,omitempty"`
Error string `json:"error"`
}
type ValidationErrorResponse struct {
Error string `json:"error"`
Field string `json:"field"`
}
@@ -594,19 +594,22 @@ func respondError(w http.ResponseWriter, status int, message string) {
func respondValidationError(w http.ResponseWriter, err error) {
errMsg := err.Error()
var field *string
var field string
if strings.Contains(errMsg, ": ") {
parts := strings.SplitN(errMsg, ": ", 3)
if len(parts) >= 3 {
fieldName := parts[1]
field = &fieldName
field = parts[1]
errMsg = parts[2]
respondJSON(w, http.StatusBadRequest, ValidationErrorResponse{
Error: errMsg,
Field: field,
})
return
}
}
respondJSON(w, http.StatusBadRequest, ErrorResponse{
Error: errMsg,
Field: field,
})
}