에러 표준화: - pkg/apperror — AppError 타입, 7개 sentinel error - pkg/middleware/error_handler — Fiber ErrorHandler 통합 - 핸들러에서 AppError 반환 시 구조화된 JSON 자동 응답 BossRaid Race Condition: - 상태 전이 4곳 낙관적 잠금 (UPDATE WHERE status=?) - TransitionRoomStatus/TransitionRoomStatusMulti 메서드 추가 - ErrStatusConflict sentinel error Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
32 lines
688 B
Go
32 lines
688 B
Go
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.
|
|
func ErrorHandler(c *fiber.Ctx, err error) error {
|
|
var appErr *apperror.AppError
|
|
if errors.As(err, &appErr) {
|
|
return c.Status(appErr.Status).JSON(appErr)
|
|
}
|
|
|
|
// Default Fiber error handling
|
|
var fiberErr *fiber.Error
|
|
if errors.As(err, &fiberErr) {
|
|
return c.Status(fiberErr.Code).JSON(fiber.Map{
|
|
"error": "server_error",
|
|
"message": fiberErr.Message,
|
|
})
|
|
}
|
|
|
|
return c.Status(500).JSON(fiber.Map{
|
|
"error": "internal_error",
|
|
"message": "서버 오류가 발생했습니다",
|
|
})
|
|
}
|