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/session"
12	"github.com/spf13/viper"
13)
14
15type App struct {
16	Context context.Context
17
18	Sessions session.Service
19	Messages message.Service
20	LLM      llm.Service
21
22	Logger logging.Interface
23}
24
25func New(ctx context.Context, conn *sql.DB) *App {
26	q := db.New(conn)
27	log := logging.NewLogger(logging.Options{
28		Level: viper.GetString("log.level"),
29	})
30	sessions := session.NewService(ctx, q)
31	messages := message.NewService(ctx, q)
32	llm := llm.NewService(ctx, log, sessions, messages)
33
34	return &App{
35		Context:  ctx,
36		Sessions: sessions,
37		Messages: messages,
38		LLM:      llm,
39		Logger:   log,
40	}
41}