cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm leaflet readability golang
at main 74 lines 2.0 kB view raw
1package utils 2 3import ( 4 "context" 5 "os" 6 "strings" 7 8 "github.com/charmbracelet/log" 9 "github.com/stormlightlabs/noteleaf/internal/models" 10 "github.com/stormlightlabs/noteleaf/internal/repo" 11 "golang.org/x/text/cases" 12 "golang.org/x/text/language" 13) 14 15// Logger is the global application logger 16var Logger *log.Logger 17 18// NewLogger creates a new logger with the specified level and format 19func NewLogger(level string, format string) *log.Logger { 20 logger := log.New(os.Stderr) 21 22 switch strings.ToLower(level) { 23 case "debug": 24 logger.SetLevel(log.DebugLevel) 25 case "info": 26 logger.SetLevel(log.InfoLevel) 27 case "warn", "warning": 28 logger.SetLevel(log.WarnLevel) 29 case "error": 30 logger.SetLevel(log.ErrorLevel) 31 default: 32 logger.SetLevel(log.InfoLevel) 33 } 34 35 if format == "json" { 36 logger.SetFormatter(log.JSONFormatter) 37 } else { 38 logger.SetFormatter(log.TextFormatter) 39 logger.SetReportTimestamp(true) 40 } 41 42 return logger 43} 44 45// GetLogger returns the global logger, creating a default one if it doesn't exist 46func GetLogger() *log.Logger { 47 if Logger == nil { 48 Logger = NewLogger("info", "text") 49 } 50 return Logger 51} 52 53func Titlecase(s string) string { 54 return cases.Title(language.Und, cases.NoLower).String(s) 55} 56 57// TestTaskRepository interface for dependency injection in tests 58type TestTaskRepository interface { 59 List(ctx context.Context, options repo.TaskListOptions) ([]*models.Task, error) 60 Update(ctx context.Context, task *models.Task) error 61} 62 63// TestBookRepository interface for dependency injection in tests 64type TestBookRepository interface { 65 List(ctx context.Context, options repo.BookListOptions) ([]*models.Book, error) 66} 67 68// TestNoteRepository interface for dependency injection in tests. 69type TestNoteRepository interface { 70 List(ctx context.Context, options repo.NoteListOptions) ([]*models.Note, error) 71 ListPublished(ctx context.Context) ([]*models.Note, error) 72 ListDrafts(ctx context.Context) ([]*models.Note, error) 73 GetLeafletNotes(ctx context.Context) ([]*models.Note, error) 74}