apierrors

package
v1.64.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2026 License: MIT Imports: 7 Imported by: 0

README

Package apierrors

Пакет apierrors предоставляет структурированный формат ошибок для gRPC-сервисов с поддержкой кодов ошибок, деталей, уровней логирования и интеграции с gRPC-статусами. Позволяет единообразно обрабатывать бизнес-ошибки и технические сбои.

Types

Error

Структура для представления ошибки API. Реализует интерфейс error.

Methods:

NewInternalServiceError(err error) Error

Создает ошибку для внутренних сбоев сервера. Возвращает ошибку с gRPC-статусом 13 (internal), бизнесовым кодом 900 и уровнем логирования error.

NewBusinessError(errorCode int, errorMessage string, err error) Error

Создает бизнес-ошибку (например, невалидные данные от клиента). Возвращает ошибку с gRPC-статусом 3 (invalid argument), указанным бизнесовым кодом и уровнем логирования warn.

New(httpStatusCode int, errorCode int, errorMessage string, err error) Error

Создает кастомную ошибку с полным контролем параметров.

(e Error) Error() string

Получить строковое представление ошибки.

(e Error) GrpcStatusError() error

Конвертирует ошибку в gRPC-сообщение с сериализованными деталями об ошибке в формате JSON.

(e Error) WithDetails(details map[string]any) Error

Добавить детали информации об ошибке.

(e Error) WithLogLevel(level log.Level) Error

Изменить уровень логирования ошибки.

(e Error) LogLevel() log.Level

Получить текущий уровень логирования ошибки

Functions

FromError(err error) *Error

Извлекает структурированную бизнесовую ошибку из gRPC-сообщения спрятанного под интерфейс error.

Usage

Default usage flow
package main

import (
	"context"
	"errors"

	"github.com/txix-open/isp-kit/grpc/apierrors"
)

type User struct {
	Id   string
	Name string
}

var (
	ErrUserNotFound     = errors.New("user not found")
	ErrUserNotFoundCode = 700
)

type userService interface {
	GetUserById(ctx context.Context, id string) (*User, error)
}

type userController struct {
	svc userService
}

func (c userController) GetUser(ctx context.Context, userId string) (*User, error) {
	result, err := c.svc.GetUserById(ctx, userId)
	switch {
	case errors.Is(err, ErrUserNotFound):
		/* user isn't found so we have to send back specific error code */
		return nil, apierrors.NewBusinessError(ErrUserNotFoundCode, ErrUserNotFound.Error(), err)
	case err != nil:
		/* got some internal error */
		return nil, apierrors.NewInternalServiceError(err)
	default:
		return result, nil
	}
}

Documentation

Index

Constants

View Source
const (
	ErrCodeInternal = 900
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Error

type Error struct {
	ErrorCode    int
	ErrorMessage string
	Details      map[string]any `json:",omitempty"`
	// contains filtered or unexported fields
}

nolint:tagliatelle

func FromError

func FromError(err error) *Error

func New

func New(
	grpcStatusCode codes.Code,
	errorCode int,
	errorMessage string,
	err error,
) Error

func NewBusinessError

func NewBusinessError(errorCode int, errorMessage string, err error) Error

func NewInternalServiceError

func NewInternalServiceError(err error) Error

func (Error) Error

func (e Error) Error() string

func (Error) GrpcStatusError

func (e Error) GrpcStatusError() error

func (Error) LogLevel

func (e Error) LogLevel() log.Level

func (Error) WithDetails

func (e Error) WithDetails(details map[string]any) Error

func (Error) WithLogLevel

func (e Error) WithLogLevel(level log.Level) Error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL