1
This commit is contained in:
75
internal/http/errors.go
Normal file
75
internal/http/errors.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package http_router
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git-molva.ru/Molva/molva-backend/services/api_gateway/internal/constants"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// =============== CUSTOM LOGO ERRORS ===============
|
||||
var (
|
||||
ErrEmptyFile = errors.New("file is empty")
|
||||
ErrMultipartParse = errors.New("failed to parse multipart form")
|
||||
ErrFileNotFound = errors.New("failed to get file from form")
|
||||
ErrTempFileCreate = errors.New("failed to create temporary file")
|
||||
ErrFileOperation = errors.New("file operation failed")
|
||||
)
|
||||
|
||||
// InvalidImageTypeError представляет ошибку неверного типа изображения
|
||||
type InvalidImageTypeError struct {
|
||||
ContentType string
|
||||
}
|
||||
|
||||
func (e *InvalidImageTypeError) Error() string {
|
||||
return fmt.Sprintf("invalid image type %s: only png, jpg, and webp are allowed", e.ContentType)
|
||||
}
|
||||
|
||||
// FileTooLargeError представляет ошибку превышения размера файла
|
||||
type FileTooLargeError struct {
|
||||
Size int64
|
||||
MaxSize int64
|
||||
}
|
||||
|
||||
func (e *FileTooLargeError) Error() string {
|
||||
return fmt.Sprintf("file too large: %d bytes, max %d bytes allowed", e.Size, e.MaxSize)
|
||||
}
|
||||
|
||||
// =============== ERROR HANDLERS ===============
|
||||
|
||||
// handleAccessError обрабатывает ошибки прав или токенов
|
||||
func (h *handler) handleAccessError(w http.ResponseWriter, err error, handlerName string) {
|
||||
if errors.Is(err, constants.ErrUnauthorized) {
|
||||
http.Error(w, constants.ErrUnauthorized.Error(), http.StatusUnauthorized)
|
||||
} else if errors.Is(err, constants.ErrForbidden) {
|
||||
http.Error(w, constants.ErrForbidden.Error(), http.StatusForbidden)
|
||||
} else {
|
||||
http.Error(w, constants.ErrInternalServerError.Error(), http.StatusInternalServerError)
|
||||
h.logger.Error("some permission or authorization error",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName))
|
||||
}
|
||||
}
|
||||
|
||||
// handleUploadError обрабатывает ошибки логотипов
|
||||
func (h *handler) handleUploadError(w http.ResponseWriter, err error, handlerName string) {
|
||||
var invalidTypeErr *InvalidImageTypeError
|
||||
|
||||
var fileTooLargeErr *FileTooLargeError
|
||||
|
||||
// Проверяем типизированные ошибки
|
||||
if errors.As(err, &invalidTypeErr) || errors.As(err, &fileTooLargeErr) ||
|
||||
errors.Is(err, ErrEmptyFile) || errors.Is(err, ErrMultipartParse) ||
|
||||
errors.Is(err, ErrFileNotFound) {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
h.logger.Error("client error uploading logo",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName))
|
||||
} else {
|
||||
http.Error(w, constants.ErrInternalServerError.Error(), http.StatusInternalServerError)
|
||||
h.logger.Error("error processing logo upload",
|
||||
slog.String("error", err.Error()),
|
||||
slog.String("handler", handlerName))
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user