backend.go

 1package backend
 2
 3import (
 4	"context"
 5
 6	"github.com/charmbracelet/log"
 7	"github.com/charmbracelet/soft-serve/server/config"
 8	"github.com/charmbracelet/soft-serve/server/db"
 9	"github.com/charmbracelet/soft-serve/server/store"
10	"github.com/charmbracelet/soft-serve/server/store/database"
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}
23
24// New returns a new Soft Serve backend.
25func New(ctx context.Context, cfg *config.Config, db *db.DB) *Backend {
26	dbstore := database.New(ctx, db)
27	logger := log.FromContext(ctx).WithPrefix("backend")
28	b := &Backend{
29		ctx:    ctx,
30		cfg:    cfg,
31		db:     db,
32		store:  dbstore,
33		logger: logger,
34	}
35
36	// TODO: implement a proper caching interface
37	cache := newCache(b, 1000)
38	b.cache = cache
39
40	return b
41}