Documentation
¶
Index ¶
Constants ¶
const ( OkMessage = "ok" ErrMessage = "error" ErrMessageRecordNotFound = "record_not_found" ErrMessageRecordAlreadyExists = "record_already_exists" ErrMessageForeignKeyViolation = "foreign_key_violation" ErrMessageUnknown = "unknown_error" ErrMessageNotFound = "not_found" ErrMessageTooManyRequests = "too_many_requests" ErrMessageUnauthenticated = "unauthenticated" ErrMessageTokenExpired = "token_expired" ErrMessageTokenInvalid = "token_invalid" ErrMessageTokenNotValidYet = "token_not_valid_yet" ErrMessageTokenInvalidIssuer = "token_invalid_issuer" ErrMessageTokenInvalidAudience = "token_invalid_audience" ErrMessageTokenMissingSubject = "token_missing_subject" ErrMessageTokenMissingTokenType = "token_missing_token_type" ErrMessageAppIDRequired = "app_id_required" ErrMessageTimestampRequired = "timestamp_required" ErrMessageSignatureRequired = "signature_required" ErrMessageTimestampInvalid = "timestamp_invalid" ErrMessageSignatureExpired = "signature_expired" ErrMessageExternalAppNotFound = "external_app_not_found" ErrMessageExternalAppDisabled = "external_app_disabled" ErrMessageIPNotAllowed = "ip_not_allowed" ErrMessageSignatureInvalid = "signature_invalid" ErrMessageAccessDenied = "access_denied" ErrMessageUnsupportedMediaType = "unsupported_media_type" ErrMessageRequestTimeout = "request_timeout" ErrMessageMonitorNotReady = "monitor_not_ready" ErrMessageInvalidFileKey = "invalid_file_key" ErrMessageFileNotFound = "file_not_found" ErrMessageFailedToGetFile = "failed_to_get_file" ErrMessageAPIRequestParamsInvalidJSON = "api_request_params_invalid_json" ErrMessageAPIRequestMetaInvalidJSON = "api_request_meta_invalid_json" ErrMessageDangerousSQL = "dangerous_sql" ErrMessageExternalAppLoaderNotImplemented = "external_app_loader_not_implemented" ErrMessageCredentialsFormatInvalid = "credentials_format_invalid" ErrMessageCredentialsFieldsRequired = "credentials_fields_required" ErrMessageSignatureDecodeFailed = "signature_decode_failed" ErrMessageNonceRequired = "nonce_required" ErrMessageNonceInvalid = "nonce_invalid" ErrMessageNonceAlreadyUsed = "nonce_already_used" ErrMessageAuthHeaderMissing = "auth_header_missing" ErrMessageAuthHeaderInvalid = "auth_header_invalid" ErrMessageUnsupportedAuthenticationType = "unsupported_authentication_type" ErrMessageUserLoaderNotImplemented = "user_loader_not_implemented" ErrMessageUserInfoLoaderNotImplemented = "user_info_loader_not_implemented" ErrMessageChallengeRequired = "challenge_required" ErrMessageChallengeTokenInvalid = "challenge_token_invalid" ErrMessageChallengeTokenExpired = "challenge_token_expired" ErrMessageChallengeTypeInvalid = "challenge_type_invalid" ErrMessageChallengeResolveFailed = "challenge_resolve_failed" ErrMessageOTPCodeRequired = "otp_code_required" ErrMessageOTPCodeInvalid = "otp_code_invalid" ErrMessageNewPasswordRequired = "new_password_required" ErrMessageDepartmentRequired = "department_required" )
i18n message keys for API responses.
const ( OkCode = 0 // Authentication errors (1000-1099). ErrCodeUnauthenticated = 1000 ErrCodeUnsupportedAuthenticationType = 1001 ErrCodeTokenExpired = 1002 ErrCodeTokenInvalid = 1003 ErrCodeTokenNotValidYet = 1004 ErrCodeTokenInvalidIssuer = 1005 ErrCodeTokenInvalidAudience = 1007 ErrCodeTokenMissingSubject = 1008 ErrCodeTokenMissingTokenType = 1009 ErrCodePrincipalInvalid = 1010 ErrCodeCredentialsInvalid = 1011 ErrCodeAppIDRequired = 1012 ErrCodeTimestampRequired = 1013 ErrCodeSignatureRequired = 1014 ErrCodeTimestampInvalid = 1015 ErrCodeSignatureExpired = 1016 ErrCodeExternalAppNotFound = 1017 ErrCodeExternalAppDisabled = 1018 ErrCodeIPNotAllowed = 1019 ErrCodeSignatureInvalid = 1020 ErrCodeNonceRequired = 1021 ErrCodeNonceInvalid = 1022 ErrCodeNonceAlreadyUsed = 1023 ErrCodeAuthHeaderMissing = 1024 ErrCodeAuthHeaderInvalid = 1025 // Challenge errors (1030-1039). ErrCodeChallengeRequired = 1030 ErrCodeChallengeTokenInvalid = 1031 ErrCodeChallengeTokenExpired = 1032 ErrCodeChallengeTypeInvalid = 1033 ErrCodeChallengeResolveFailed = 1034 ErrCodeOTPCodeRequired = 1035 ErrCodeOTPCodeInvalid = 1036 ErrCodeNewPasswordRequired = 1037 ErrCodeDepartmentRequired = 1038 // Authorization errors (1100-1199). ErrCodeAccessDenied = 1100 // Resource errors (1200-1299). ErrCodeNotFound = 1200 // Media type errors (1300-1399). ErrCodeUnsupportedMediaType = 1300 // Request errors (1400-1499). ErrCodeBadRequest = 1400 ErrCodeTooManyRequests = 1401 ErrCodeRequestTimeout = 1402 // Not implemented (1500-1599). ErrCodeNotImplemented = 1500 // SQL errors (1600-1699). ErrCodeDangerousSQL = 1600 // Unknown errors (1900-1999). ErrCodeUnknown = 1900 // Business errors (2000+). ErrCodeDefault = 2000 ErrCodeRecordNotFound = 2001 ErrCodeRecordAlreadyExists = 2002 ErrCodeForeignKeyViolation = 2003 ErrCodeMonitorNotReady = 2100 ErrCodeInvalidFileKey = 2200 ErrCodeFileNotFound = 2201 ErrCodeSchemaTableNotFound = 2300 )
Response codes for API results. Code 0 indicates success; codes 1000+ indicate authentication/authorization errors; codes 2000+ indicate business logic errors.
Variables ¶
var ( ErrUnauthenticated = Err( i18n.T(ErrMessageUnauthenticated), WithCode(ErrCodeUnauthenticated), WithStatus(fiber.StatusUnauthorized), ) ErrTokenExpired = Err( i18n.T(ErrMessageTokenExpired), WithCode(ErrCodeTokenExpired), WithStatus(fiber.StatusUnauthorized), ) ErrTokenInvalid = Err( i18n.T(ErrMessageTokenInvalid), WithCode(ErrCodeTokenInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrTokenNotValidYet = Err( i18n.T(ErrMessageTokenNotValidYet), WithCode(ErrCodeTokenNotValidYet), WithStatus(fiber.StatusUnauthorized), ) ErrTokenInvalidIssuer = Err( i18n.T(ErrMessageTokenInvalidIssuer), WithCode(ErrCodeTokenInvalidIssuer), WithStatus(fiber.StatusUnauthorized), ) ErrTokenInvalidAudience = Err( i18n.T(ErrMessageTokenInvalidAudience), WithCode(ErrCodeTokenInvalidAudience), WithStatus(fiber.StatusUnauthorized), ) ErrTokenMissingSubject = Err( i18n.T(ErrMessageTokenMissingSubject), WithCode(ErrCodeTokenMissingSubject), WithStatus(fiber.StatusUnauthorized), ) ErrTokenMissingTokenType = Err( i18n.T(ErrMessageTokenMissingTokenType), WithCode(ErrCodeTokenMissingTokenType), WithStatus(fiber.StatusUnauthorized), ) )
Predefined authentication errors (HTTP 401).
var ( ErrAppIDRequired = Err( i18n.T(ErrMessageAppIDRequired), WithCode(ErrCodeAppIDRequired), WithStatus(fiber.StatusUnauthorized), ) ErrTimestampRequired = Err( i18n.T(ErrMessageTimestampRequired), WithCode(ErrCodeTimestampRequired), WithStatus(fiber.StatusUnauthorized), ) ErrSignatureRequired = Err( i18n.T(ErrMessageSignatureRequired), WithCode(ErrCodeSignatureRequired), WithStatus(fiber.StatusUnauthorized), ) ErrTimestampInvalid = Err( i18n.T(ErrMessageTimestampInvalid), WithCode(ErrCodeTimestampInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrSignatureExpired = Err( i18n.T(ErrMessageSignatureExpired), WithCode(ErrCodeSignatureExpired), WithStatus(fiber.StatusUnauthorized), ) ErrSignatureInvalid = Err( i18n.T(ErrMessageSignatureInvalid), WithCode(ErrCodeSignatureInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrExternalAppNotFound = Err( i18n.T(ErrMessageExternalAppNotFound), WithCode(ErrCodeExternalAppNotFound), WithStatus(fiber.StatusUnauthorized), ) ErrExternalAppDisabled = Err( i18n.T(ErrMessageExternalAppDisabled), WithCode(ErrCodeExternalAppDisabled), WithStatus(fiber.StatusUnauthorized), ) ErrIPNotAllowed = Err( i18n.T(ErrMessageIPNotAllowed), WithCode(ErrCodeIPNotAllowed), WithStatus(fiber.StatusUnauthorized), ) ErrNonceRequired = Err( i18n.T(ErrMessageNonceRequired), WithCode(ErrCodeNonceRequired), WithStatus(fiber.StatusUnauthorized), ) ErrNonceInvalid = Err( i18n.T(ErrMessageNonceInvalid), WithCode(ErrCodeNonceInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrNonceAlreadyUsed = Err( i18n.T(ErrMessageNonceAlreadyUsed), WithCode(ErrCodeNonceAlreadyUsed), WithStatus(fiber.StatusUnauthorized), ) ErrAuthHeaderMissing = Err( i18n.T(ErrMessageAuthHeaderMissing), WithCode(ErrCodeAuthHeaderMissing), WithStatus(fiber.StatusUnauthorized), ) ErrAuthHeaderInvalid = Err( i18n.T(ErrMessageAuthHeaderInvalid), WithCode(ErrCodeAuthHeaderInvalid), WithStatus(fiber.StatusUnauthorized), ) )
Predefined external app authentication errors (HTTP 401).
var ( ErrAccessDenied = Err( i18n.T(ErrMessageAccessDenied), WithCode(ErrCodeAccessDenied), WithStatus(fiber.StatusForbidden), ) ErrTooManyRequests = Err( i18n.T(ErrMessageTooManyRequests), WithCode(ErrCodeTooManyRequests), WithStatus(fiber.StatusTooManyRequests), ) ErrRequestTimeout = Err( i18n.T(ErrMessageRequestTimeout), WithCode(ErrCodeRequestTimeout), WithStatus(fiber.StatusRequestTimeout), ) ErrUnknown = Err( i18n.T(ErrMessageUnknown), WithCode(ErrCodeUnknown), WithStatus(fiber.StatusInternalServerError), ) )
Predefined authorization and request errors.
var ( ErrChallengeTokenInvalid = Err( i18n.T(ErrMessageChallengeTokenInvalid), WithCode(ErrCodeChallengeTokenInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrChallengeTypeInvalid = Err( i18n.T(ErrMessageChallengeTypeInvalid), WithCode(ErrCodeChallengeTypeInvalid), WithStatus(fiber.StatusBadRequest), ) ErrOTPCodeRequired = Err( i18n.T(ErrMessageOTPCodeRequired), WithCode(ErrCodeOTPCodeRequired), WithStatus(fiber.StatusBadRequest), ) ErrOTPCodeInvalid = Err( i18n.T(ErrMessageOTPCodeInvalid), WithCode(ErrCodeOTPCodeInvalid), WithStatus(fiber.StatusUnauthorized), ) ErrNewPasswordRequired = Err( i18n.T(ErrMessageNewPasswordRequired), WithCode(ErrCodeNewPasswordRequired), WithStatus(fiber.StatusBadRequest), ) ErrDepartmentRequired = Err( i18n.T(ErrMessageDepartmentRequired), WithCode(ErrCodeDepartmentRequired), WithStatus(fiber.StatusBadRequest), ) )
Predefined challenge errors.
var ( ErrRecordNotFound = Err( i18n.T(ErrMessageRecordNotFound), WithCode(ErrCodeRecordNotFound), ) ErrRecordAlreadyExists = Err( i18n.T(ErrMessageRecordAlreadyExists), WithCode(ErrCodeRecordAlreadyExists), ) ErrForeignKeyViolation = Err( i18n.T(ErrMessageForeignKeyViolation), WithCode(ErrCodeForeignKeyViolation), ) ErrDangerousSQL = Err( i18n.T(ErrMessageDangerousSQL), WithCode(ErrCodeDangerousSQL), ) )
Predefined business errors (HTTP 200 with error code).
Functions ¶
func IsRecordNotFound ¶
IsRecordNotFound checks if the error is a record not found error.
Types ¶
type Error ¶
Error represents a business-level error for API responses. It separates transport-level concerns (HTTP Status) from business logic (Code, Message). HTTP Status typically remains 200 to indicate successful communication, while Code indicates the actual business result.
func Err ¶
Err creates a new Error with optional message and options. Usage: Err(), Err("message"), Err("message", WithCode(...)), Err(WithCode(...)).
func ErrCredentialsInvalid ¶
ErrCredentialsInvalid creates a credentials invalid error with custom message (HTTP 401).
func ErrNotImplemented ¶
ErrNotImplemented creates a not implemented error with custom message (HTTP 501).
func ErrPrincipalInvalid ¶
ErrPrincipalInvalid creates a principal invalid error with custom message (HTTP 401).
type OkOption ¶
type OkOption func(*Result)
OkOption configures a Result.
func WithMessage ¶
WithMessage sets a custom message for the result.
func WithMessagef ¶
WithMessagef sets a formatted message for the result.
type Result ¶
type Result struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data"`
}
Result represents an API response with code, message, and optional data.
func Ok ¶
Ok creates a success Result with optional data and options. Usage: Ok(), Ok(data), Ok(WithMessage(...)), Ok(data, WithMessage(...)).