shortify/shortify.go
2025-08-06 17:38:23 +02:00

58 lines
988 B
Go

package shortify
import (
"sync"
"git.tijl.dev/tijl/shortify/pkg/generation"
"github.com/hashicorp/golang-lru"
bolt "go.etcd.io/bbolt"
)
type Server struct {
storage *Storage
prefixManager *PrefixManager
serverGen *generation.Generator
cache *lru.Cache
cacheLock sync.RWMutex
dataFolder string
logChan chan VisitLog
}
type Config struct {
DataFolder string
}
func New(cfg Config) (*Server, error) {
db, err := bolt.Open(cfg.DataFolder+"/database.db", 0600, nil)
if err != nil {
return nil, err
}
prefixManager, err := NewPrefixManager(db)
if err != nil {
return nil, err
}
storage, err := NewStorage(db)
if err != nil {
return nil, err
}
cache, _ := lru.New(10000)
s := &Server{
dataFolder: cfg.DataFolder,
storage: storage,
cache: cache,
serverGen: generation.NewGenerator(0),
prefixManager: prefixManager,
logChan: make(chan VisitLog, 1000),
}
go s.startLogging()
return s, nil
}