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:
@@ -96,7 +96,7 @@ type LogoutRequest struct {
|
|||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param request body RegisterRequest true "Registration data (password requires: min 8 chars, uppercase, lowercase, digit, special char)"
|
// @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"
|
// @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 403 {object} ErrorResponse "Registration is closed"
|
||||||
// @Failure 409 {object} ErrorResponse "Email already registered"
|
// @Failure 409 {object} ErrorResponse "Email already registered"
|
||||||
// @Failure 500 {object} ErrorResponse "Internal server error"
|
// @Failure 500 {object} ErrorResponse "Internal server error"
|
||||||
|
|||||||
@@ -85,6 +85,10 @@ type HabitEntriesResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ErrorResponse struct {
|
type ErrorResponse struct {
|
||||||
Error string `json:"error"`
|
Error string `json:"error"`
|
||||||
Field *string `json:"field,omitempty"`
|
}
|
||||||
|
|
||||||
|
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) {
|
func respondValidationError(w http.ResponseWriter, err error) {
|
||||||
errMsg := err.Error()
|
errMsg := err.Error()
|
||||||
var field *string
|
var field string
|
||||||
|
|
||||||
if strings.Contains(errMsg, ": ") {
|
if strings.Contains(errMsg, ": ") {
|
||||||
parts := strings.SplitN(errMsg, ": ", 3)
|
parts := strings.SplitN(errMsg, ": ", 3)
|
||||||
if len(parts) >= 3 {
|
if len(parts) >= 3 {
|
||||||
fieldName := parts[1]
|
field = parts[1]
|
||||||
field = &fieldName
|
|
||||||
errMsg = parts[2]
|
errMsg = parts[2]
|
||||||
|
respondJSON(w, http.StatusBadRequest, ValidationErrorResponse{
|
||||||
|
Error: errMsg,
|
||||||
|
Field: field,
|
||||||
|
})
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
respondJSON(w, http.StatusBadRequest, ErrorResponse{
|
respondJSON(w, http.StatusBadRequest, ErrorResponse{
|
||||||
Error: errMsg,
|
Error: errMsg,
|
||||||
Field: field,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user