cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm
leaflet
readability
golang
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}