Преглед изворни кода

refactor: streamline error handling and configuration management across services

lblt пре 2 недеља
родитељ
комит
08532b9cd4
6 измењених фајлова са 51 додато и 28 уклоњено
  1. 2 3
      examples/main.go
  2. 37 0
      pkg/errors/errors.go
  3. 0 8
      pkg/server/config.go
  4. 2 7
      pkg/server/gin.go
  5. 9 0
      pkg/smtp/config.go
  6. 1 10
      pkg/smtp/service.go

+ 2 - 3
examples/main.go

@@ -5,7 +5,6 @@ import (
 	"time"
 
 	"git.linuxforward.com/byom/byom-golang-lib/pkg/database"
-	"git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
 	"git.linuxforward.com/byom/byom-golang-lib/pkg/logger"
 	"git.linuxforward.com/byom/byom-golang-lib/pkg/server"
 	"git.linuxforward.com/byom/byom-golang-lib/pkg/storage"
@@ -66,7 +65,7 @@ func main() {
 	router.POST("/upload", func(c *gin.Context) {
 		file, header, err := c.Request.FormFile("file")
 		if err != nil {
-			c.Error(errors.NewStorageError("read_form", minioClient.BucketName(), err))
+			c.Error(storage.NewError("upload", storage.ErrUploadFailed, err.Error()))
 			return
 		}
 		defer file.Close()
@@ -82,7 +81,7 @@ func main() {
 			},
 		)
 		if err != nil {
-			c.Error(errors.NewStorageError("upload", minioClient.BucketName(), err))
+			c.Error(storage.NewObjectError("upload", minioClient.BucketName(), header.Filename, storage.ErrUploadFailed, err.Error()))
 			return
 		}
 

+ 37 - 0
pkg/errors/errors.go

@@ -0,0 +1,37 @@
+package errors
+
+import (
+	stderrors "errors"
+	"fmt"
+)
+
+// Standard errors that can be used across packages
+var (
+	ErrNotFound          = stderrors.New("resource not found")
+	ErrInvalidInput      = stderrors.New("invalid input")
+	ErrUnauthorized      = stderrors.New("unauthorized")
+	ErrInternalServer    = stderrors.New("internal server error")
+	ErrDatabaseOperation = stderrors.New("database operation failed")
+)
+
+// ConfigError represents a configuration-related error
+type ConfigError struct {
+	Section string
+	Err     error
+}
+
+func (e *ConfigError) Error() string {
+	return fmt.Sprintf("configuration error in %s: %v", e.Section, e.Err)
+}
+
+func (e *ConfigError) Unwrap() error {
+	return e.Err
+}
+
+// NewConfigError creates a new ConfigError
+func NewConfigError(section string, err error) *ConfigError {
+	return &ConfigError{
+		Section: section,
+		Err:     err,
+	}
+}

+ 0 - 8
pkg/server/config.go

@@ -19,11 +19,3 @@ func (c *Config) Validate() error {
 	}
 	return nil
 }
-
-// ToServerConfig converts Config to ServerConfig for internal use
-func (c *Config) ToServerConfig() ServerConfig {
-	return ServerConfig{
-		AllowedOrigins: c.AllowedOrigins,
-		RequestTimeout: c.RequestTimeout,
-	}
-}

+ 2 - 7
pkg/server/gin.go

@@ -7,11 +7,6 @@ import (
 	"github.com/sirupsen/logrus"
 )
 
-type ServerConfig struct {
-	AllowedOrigins []string
-	RequestTimeout time.Duration
-}
-
 type ServiceHandler interface {
 	SetupRoutes(r *gin.Engine)
 	Close() error
@@ -20,7 +15,7 @@ type ServiceHandler interface {
 type Server struct {
 	router   *gin.Engine
 	logger   *logrus.Logger
-	config   ServerConfig
+	config   *Config
 	handlers []*ServiceHandler
 }
 
@@ -38,7 +33,7 @@ func NewGinServer(logger *logrus.Logger, config *Config) (*Server, error) {
 	server := &Server{
 		router: router,
 		logger: logger,
-		config: config.ToServerConfig(),
+		config: config,
 	}
 
 	// Add middleware in specific order

+ 9 - 0
pkg/smtp/config.go

@@ -0,0 +1,9 @@
+package smtp
+
+type Config struct {
+	Host     string `yaml:"host"`
+	Port     int    `yaml:"port"`
+	Username string `yaml:"username"`
+	Password string `yaml:"password"`
+	From     string `yaml:"from"`
+}

+ 1 - 10
pkg/smtp/service.go

@@ -9,15 +9,6 @@ import (
 	"github.com/wneessen/go-mail"
 )
 
-// SMTPConfig holds the configuration for the SMTP service
-type SMTPConfig struct {
-	Host     string
-	Port     int
-	Username string
-	Password string
-	From     string
-}
-
 // EmailData holds the data for the default email template
 type EmailData struct {
 	Subject string
@@ -44,7 +35,7 @@ type SMTPService struct {
 }
 
 // NewSMTPService creates a new SMTP service instance
-func NewSMTPService(config SMTPConfig, logger *logrus.Logger) (*SMTPService, error) {
+func NewSMTPService(config *Config, logger *logrus.Logger) (*SMTPService, error) {
 	if logger == nil {
 		return nil, NewError("initialization", ErrInvalidConfig, "logger is required")
 	}