refactor to use app package instead of service

refactor app to be composable
This commit is contained in:
Robin Olsen
2026-02-28 23:30:31 +01:00
parent ba4d3df669
commit aabce0b0b2
56 changed files with 385 additions and 279 deletions

68
internal/app/options.go Normal file
View File

@@ -0,0 +1,68 @@
package app
import (
"context"
"log/slog"
"os"
"github.com/LazyBachelor/LazyPM/internal/models"
)
type Option func(*AppBuilder) error
type AppBuilder struct {
config Config
ctx context.Context
logger *slog.Logger
lifecycle *Lifecycle
initializer Initializer
issueService models.IssueService
statsService models.StatsService
}
func defaultBuilder(ctx context.Context, config Config) *AppBuilder {
return &AppBuilder{
ctx: ctx,
config: config,
lifecycle: NewLifecycle(),
initializer: &InteractiveInitializer{},
logger: slog.New(slog.NewJSONHandler(os.Stdout, nil)),
}
}
func WithLogger(logger *slog.Logger) Option {
return func(b *AppBuilder) error {
b.logger = logger
return nil
}
}
func WithInitializer(initializer Initializer) Option {
return func(b *AppBuilder) error {
b.initializer = initializer
return nil
}
}
func WithLifecycle(l *Lifecycle) Option {
return func(b *AppBuilder) error {
b.lifecycle = l
return nil
}
}
func WithIssueService(svc models.IssueService) Option {
return func(b *AppBuilder) error {
b.issueService = svc
return nil
}
}
func WithStatsService(svc models.StatsService) Option {
return func(b *AppBuilder) error {
b.statsService = svc
return nil
}
}