error.go 1.09 KB
package handler

import (
	"github.com/gofiber/fiber/v3"
	"ui.ac.id/dtd/go-webserver-boilerplate/internal/domain" // Adjust import path to your project
)

func ErrorHandler(ctx fiber.Ctx, err error) error {
	if err == nil {
		return nil
	}

	code := fiber.StatusInternalServerError

	if customErr, ok := err.(*domain.Error); ok {
		switch customErr.Code {
		case domain.NotFound:
			code = fiber.StatusNotFound
		case domain.Validation:
			code = fiber.StatusBadRequest
		case domain.Database:
			code = fiber.StatusInternalServerError
		case domain.InactiveUser:
			code = fiber.StatusForbidden
		default:
			code = fiber.StatusInternalServerError
		}
	} else if fiberErr, ok := err.(*fiber.Error); ok {
		code = fiberErr.Code
	}

	response := NewBaseResponse(code, nil, err)
	return ctx.Status(code).JSON(response)
}

func formatError(err error) ErrorResponse {
	if customErr, ok := err.(*domain.Error); ok {
		errResp := ErrorResponse{
			Message: customErr.Message,
		}
		if customErr.Err != nil {
			errResp.Details = customErr.Err.Error()
		}
		return errResp
	}
	return ErrorResponse{
		Message: err.Error(),
	}
}