services.go

 1package app
 2
 3import (
 4	"context"
 5	"database/sql"
 6
 7	"github.com/kujtimiihoxha/termai/internal/db"
 8	"github.com/kujtimiihoxha/termai/internal/llm"
 9	"github.com/kujtimiihoxha/termai/internal/logging"
10	"github.com/kujtimiihoxha/termai/internal/message"
11	"github.com/kujtimiihoxha/termai/internal/permission"
12	"github.com/kujtimiihoxha/termai/internal/session"
13	"github.com/spf13/viper"
14)
15
16type App struct {
17	Context context.Context
18
19	Sessions    session.Service
20	Messages    message.Service
21	Permissions permission.Service
22	LLM         llm.Service
23
24	Logger logging.Interface
25}
26
27func New(ctx context.Context, conn *sql.DB) *App {
28	q := db.New(conn)
29	log := logging.NewLogger(logging.Options{
30		Level: viper.GetString("log.level"),
31	})
32	sessions := session.NewService(ctx, q)
33	messages := message.NewService(ctx, q)
34	llm := llm.NewService(ctx, log, sessions, messages)
35
36	return &App{
37		Context:     ctx,
38		Sessions:    sessions,
39		Messages:    messages,
40		Permissions: permission.Default,
41		LLM:         llm,
42		Logger:      log,
43	}
44}