chore: simplify db schema creation (#26693)

This commit is contained in:
andig 2026-01-14 14:43:01 +01:00 • committed by GitHub
parent ad014333b2
commit 45741b1c90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 35 additions and 47 deletions

View file

@ -22,8 +22,7 @@ type circuitsTestSuite struct {
}
func (suite *circuitsTestSuite) SetupSuite() {
_ = db.NewInstance("sqlite", ":memory:")
config.SetupSchema()
suite.Require().NoError(db.NewInstance("sqlite", ":memory:"))
}
func (suite *circuitsTestSuite) SetupTest() {

View file

@ -5,6 +5,7 @@ import (
"time"
"github.com/evcc-io/evcc/server/db"
"gorm.io/gorm"
)
type meter struct {
@ -16,16 +17,11 @@ type meter struct {
var ErrIncomplete = errors.New("meter profile incomplete")
func init() {
db.Register(func() error {
return SetupSchema()
db.Register(func(db *gorm.DB) error {
return db.AutoMigrate(new(meter))
})
}
// SetupSchema is used for testing
func SetupSchema() error {
return db.Instance.AutoMigrate(new(meter))
}
// Persist stores 15min consumption in Wh
func Persist(ts time.Time, value float64) error {
return db.Instance.Create(meter{

View file

@ -13,17 +13,15 @@ type DB struct {
name string
}
var (
sessions Sessions
)
var sessions Sessions
func init() {
db.Register(func() error {
if err := db.Instance.AutoMigrate(new(Session)); err != nil {
db.Register(func(db *gorm.DB) error {
if err := db.AutoMigrate(new(Session)); err != nil {
return err
}
return db.Instance.Find(&sessions).Error
return db.Find(&sessions).Error
})
}

View file

@ -15,12 +15,10 @@ import (
)
func TestSqliteTimestamp(t *testing.T) {
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
clock := clock.NewMock()
clock.Add(time.Hour)
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
require.NoError(t, metrics.SetupSchema())
metrics.Persist(clock.Now(), 0)
db, err := db.Instance.DB()
@ -50,14 +48,12 @@ func TestSqliteTimestamp(t *testing.T) {
}
func TestUpdateHouseholdProfile(t *testing.T) {
clock := clock.NewMock()
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
// make sure test data added starting 00:00 local time
clock := clock.NewMock()
clock.Set(now.With(clock.Now()).BeginningOfDay())
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
require.NoError(t, metrics.SetupSchema())
// 2 days of data
// day 1: 0 ... 95
// day 2: 96 ... 181

View file

@ -6,7 +6,6 @@ import (
"github.com/benbjohnson/clock"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/core/metrics"
"github.com/evcc-io/evcc/server/db"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/config"
@ -163,10 +162,9 @@ func TestRequiredBatteryMode(t *testing.T) {
}
func TestUpdateHomeConsumption(t *testing.T) {
clock := clock.NewMock()
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
require.NoError(t, metrics.SetupSchema())
clock := clock.NewMock()
s := &Site{
log: util.NewLogger("foo"),

View file

@ -4,11 +4,12 @@ import (
"time"
"github.com/evcc-io/evcc/server/db"
"gorm.io/gorm"
)
func init() {
db.Register(func() error {
return db.Instance.AutoMigrate(new(GridSession))
db.Register(func(db *gorm.DB) error {
return db.AutoMigrate(new(GridSession))
})
}

View file

@ -18,8 +18,8 @@ type Cache struct {
}
func init() {
db.Register(func() error {
return db.Instance.AutoMigrate(new(Cache))
db.Register(func(db *gorm.DB) error {
return db.AutoMigrate(new(Cache))
})
}

View file

@ -74,18 +74,18 @@ func New(driver, dsn string) (*gorm.DB, error) {
}
func NewInstance(driver, dsn string) error {
inst, err := New(strings.ToLower(driver), dsn)
db, err := New(strings.ToLower(driver), dsn)
if err != nil {
return err
}
Instance = inst
Instance = db
mu.Lock()
defer mu.Unlock()
for _, f := range registry {
if err := f(); err != nil {
if err := f(db); err != nil {
return err
}
}

View file

@ -1,13 +1,17 @@
package db
import "sync"
import (
"sync"
"gorm.io/gorm"
)
var (
mu sync.Mutex
registry []func() error
registry []func(db *gorm.DB) error
)
func Register(fun func() error) {
func Register(fun func(db *gorm.DB) error) {
mu.Lock()
defer mu.Unlock()
registry = append(registry, fun)

View file

@ -17,6 +17,7 @@ import (
"github.com/evcc-io/evcc/util"
"github.com/samber/lo"
"go.yaml.in/yaml/v4"
"gorm.io/gorm"
)
var ErrNotFound = errors.New("not found")
@ -34,12 +35,12 @@ var (
)
func init() {
db.Register(func() error {
if err := db.Instance.AutoMigrate(new(setting)); err != nil {
db.Register(func(db *gorm.DB) error {
if err := db.AutoMigrate(new(setting)); err != nil {
return err
}
return db.Instance.Find(&settings).Error
return db.Find(&settings).Error
})
}

View file

@ -77,16 +77,11 @@ func (d *Config) Delete() error {
}
func init() {
db.Register(func() error {
return SetupSchema()
db.Register(func(db *gorm.DB) error {
return db.AutoMigrate(new(Config))
})
}
// SetupSchema is used for testing
func SetupSchema() error {
return db.Instance.AutoMigrate(new(Config))
}
// NameForID returns a unique config name for the given id
func NameForID(id int) string {
return fmt.Sprintf("db:%d", id)