// Package greeter is a minimal example domain package. // It demonstrates how to: // - define an interface (mockable via mockery) // - inject dependencies (logger) through a constructor // - use the logger.WithField pattern // // Replace this package with your own domain logic. package greeter import ( "fmt" "gitea.djmil.dev/djmil/go-template/internal/logger" ) //go:generate mockery --name=Greeter // Greeter produces a greeting for a given name. // The interface is what other packages should depend on — never the concrete type. type Greeter interface { Greet(name string) (string, error) } // Service is the concrete implementation. type Service struct { log *logger.Logger } // New creates a Greeter service with the provided logger. func New(log *logger.Logger) *Service { return &Service{log: log} } // Greet returns a personalised greeting and logs the interaction. func (s *Service) Greet(name string) (string, error) { if name == "" { return "", fmt.Errorf("greeter: name must not be empty") } msg := fmt.Sprintf("Hello, %s!", name) s.log. WithField("component", "greeter"). WithField("name", name). Info("greeting generated") return msg, nil }