package database import ( "fmt" "io/fs" "log/slog" "bunker/server/internal/application" "bunker/server/internal/services/core" "github.com/jmoiron/sqlx" ) var _ = core.Database(&database{}) type database struct { app *application.Application db *sqlx.DB logger *slog.Logger migrations map[string]fs.FS version int64 } // Initialize initializes service. func Initialize(app *application.Application) error { db := &database{ app: app, } if err := app.RegisterService(db); err != nil { return fmt.Errorf("%w: %w", core.ErrDatabase, err) } return nil } func (d *database) Configure() error { if err := d.initializeConnection(); err != nil { return fmt.Errorf("configure: %w", err) } return nil } func (d *database) ConnectDependencies() error { return nil } func (d *database) Initialize() error { d.logger = d.app.NewLogger("service", core.ServiceNameDatabase) d.logger.Info("Initializing...") d.migrations = make(map[string]fs.FS, 0) return nil } func (d *database) Name() string { return core.ServiceNameDatabase } func (d *database) LaunchStartupTasks() error { if err := d.applyMigrations(); err != nil { return fmt.Errorf("launch startup tasks: %w", err) } return nil } func (d *database) Shutdown() error { return nil }