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}