package middleware import ( "errors" "a301_server/pkg/apperror" "github.com/gofiber/fiber/v2" ) // ErrorHandler is a Fiber error handler that returns structured JSON for AppError. // Includes requestID in error responses for log correlation. func ErrorHandler(c *fiber.Ctx, err error) error { requestID, _ := c.Locals("requestID").(string) var appErr *apperror.AppError if errors.As(err, &appErr) { resp := fiber.Map{ "error": appErr.Code, "message": appErr.Message, } if requestID != "" { resp["requestId"] = requestID } return c.Status(appErr.Status).JSON(resp) } // Default Fiber error handling var fiberErr *fiber.Error if errors.As(err, &fiberErr) { resp := fiber.Map{ "error": "server_error", "message": fiberErr.Message, } if requestID != "" { resp["requestId"] = requestID } return c.Status(fiberErr.Code).JSON(resp) } resp := fiber.Map{ "error": "internal_error", "message": "서버 오류가 발생했습니다", } if requestID != "" { resp["requestId"] = requestID } return c.Status(500).JSON(resp) }