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}