// Package greeter is a minimal example domain package. // It demonstrates how to: // - define an interface (satisfied by manual fakes in tests) // - inject dependencies (logger) through a constructor // - use the logger.WithField pattern // // Replace this package with your own domain logic. package greeter import ( "errors" "fmt" "gitea.djmil.dev/go/template/internal/logger" "gitea.djmil.dev/go/template/pkg/result" ) // 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) result.Expect[string] } // 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 personalized greeting and logs the interaction. func (s *Service) Greet(name string) result.Expect[string] { if name == "" { return result.Fail[string](errors.New("Greet: name must not be empty")) } msg := fmt.Sprintf("Hello, %s!", name) s.log. WithField("component", "greeter"). WithField("name", name). Info("greeting generated") return result.Ok(msg) }