hako/internal/dependencies/dependencies.go
2026-01-12 19:35:18 +01:00

112 lines
2.7 KiB
Go

package dependencies
import (
"log/slog"
toolkitModel "git.nakama.town/fmartingr/gotoolkit/model"
"git.nakama.town/fmartingr/hako/internal/archival/archiver"
"git.nakama.town/fmartingr/hako/internal/archival/rules"
archivalStore "git.nakama.town/fmartingr/hako/internal/archival/store"
"git.nakama.town/fmartingr/hako/internal/auth"
"git.nakama.town/fmartingr/hako/internal/auth/store"
"git.nakama.town/fmartingr/hako/internal/config"
"git.nakama.town/fmartingr/hako/internal/extractors"
"git.nakama.town/fmartingr/hako/internal/model"
)
// Dependencies holds all application dependencies
type Dependencies struct {
log *slog.Logger
config *config.Config
database toolkitModel.DB
domains *domains
// Stores
LinkStore *archivalStore.LinkStore
ArchiveStore *archivalStore.ArchiveStore
ArchiveFileStore *archivalStore.ArchiveFileStore
LinkCategoryStore *archivalStore.LinkCategoryStore
CategoryStore *archivalStore.CategoryStore
ArchiverConfigStore *archivalStore.ArchiverConfigStore
SettingsStore *archivalStore.SettingsStore
UserStore *store.UserStore
// Other dependencies
Storage model.Storage
Queue model.Queue
ArchiverMgr *archiver.Manager
ExtractorMgr *extractors.Manager
RuleEngine *rules.Engine
JWTService *auth.JWTService
}
func (d *Dependencies) Logger() *slog.Logger {
return d.log
}
func (d *Dependencies) Config() *config.Config {
return d.config
}
func (d *Dependencies) Database() toolkitModel.DB {
return d.database
}
func (d *Dependencies) Domains() model.DomainDependencies {
return d.domains
}
func (d *Dependencies) GetJWTService() *auth.JWTService {
return d.JWTService
}
type domains struct {
links model.LinkDomain
archives model.ArchiveDomain
categories model.CategoryDomain
auth model.AuthDomain
}
func (d *domains) Links() model.LinkDomain {
return d.links
}
func (d *domains) SetLinks(links model.LinkDomain) {
d.links = links
}
func (d *domains) Archives() model.ArchiveDomain {
return d.archives
}
func (d *domains) SetArchives(archives model.ArchiveDomain) {
d.archives = archives
}
func (d *domains) Categories() model.CategoryDomain {
return d.categories
}
func (d *domains) SetCategories(categories model.CategoryDomain) {
d.categories = categories
}
func (d *domains) Auth() model.AuthDomain {
return d.auth
}
func (d *domains) SetAuth(auth model.AuthDomain) {
d.auth = auth
}
var _ model.DomainDependencies = (*domains)(nil)
// NewDependencies creates a new Dependencies instance
func NewDependencies(log *slog.Logger, db toolkitModel.DB, cfg *config.Config) *Dependencies {
return &Dependencies{
log: log,
config: cfg,
database: db,
domains: &domains{},
}
}