1package backend
 2
 3import (
 4	"context"
 5
 6	"github.com/charmbracelet/log"
 7	"github.com/charmbracelet/soft-serve/pkg/config"
 8	"github.com/charmbracelet/soft-serve/pkg/db"
 9	"github.com/charmbracelet/soft-serve/pkg/store"
10	"github.com/charmbracelet/soft-serve/pkg/task"
11)
12
13// Backend is the Soft Serve backend that handles users, repositories, and
14// server settings management and operations.
15type Backend struct {
16	ctx     context.Context
17	cfg     *config.Config
18	db      *db.DB
19	store   store.Store
20	logger  *log.Logger
21	cache   *cache
22	manager *task.Manager
23}
24
25// New returns a new Soft Serve backend.
26func New(ctx context.Context, cfg *config.Config, db *db.DB) *Backend {
27	dbstore := store.FromContext(ctx)
28	logger := log.FromContext(ctx).WithPrefix("backend")
29	b := &Backend{
30		ctx:     ctx,
31		cfg:     cfg,
32		db:      db,
33		store:   dbstore,
34		logger:  logger,
35		manager: task.NewManager(ctx),
36	}
37
38	// TODO: implement a proper caching interface
39	cache := newCache(b, 1000)
40	b.cache = cache
41
42	return b
43}