chore: simplify db schema creation (#26693)
This commit is contained in:
parent
ad014333b2
commit
45741b1c90
11 changed files with 35 additions and 47 deletions
|
|
@ -22,8 +22,7 @@ type circuitsTestSuite struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *circuitsTestSuite) SetupSuite() {
|
func (suite *circuitsTestSuite) SetupSuite() {
|
||||||
_ = db.NewInstance("sqlite", ":memory:")
|
suite.Require().NoError(db.NewInstance("sqlite", ":memory:"))
|
||||||
config.SetupSchema()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *circuitsTestSuite) SetupTest() {
|
func (suite *circuitsTestSuite) SetupTest() {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/evcc-io/evcc/server/db"
|
"github.com/evcc-io/evcc/server/db"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type meter struct {
|
type meter struct {
|
||||||
|
|
@ -16,16 +17,11 @@ type meter struct {
|
||||||
var ErrIncomplete = errors.New("meter profile incomplete")
|
var ErrIncomplete = errors.New("meter profile incomplete")
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
return SetupSchema()
|
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
|
// Persist stores 15min consumption in Wh
|
||||||
func Persist(ts time.Time, value float64) error {
|
func Persist(ts time.Time, value float64) error {
|
||||||
return db.Instance.Create(meter{
|
return db.Instance.Create(meter{
|
||||||
|
|
|
||||||
|
|
@ -13,17 +13,15 @@ type DB struct {
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var sessions Sessions
|
||||||
sessions Sessions
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
if err := db.Instance.AutoMigrate(new(Session)); err != nil {
|
if err := db.AutoMigrate(new(Session)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return db.Instance.Find(&sessions).Error
|
return db.Find(&sessions).Error
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSqliteTimestamp(t *testing.T) {
|
func TestSqliteTimestamp(t *testing.T) {
|
||||||
|
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||||
|
|
||||||
clock := clock.NewMock()
|
clock := clock.NewMock()
|
||||||
clock.Add(time.Hour)
|
clock.Add(time.Hour)
|
||||||
|
|
||||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
|
||||||
require.NoError(t, metrics.SetupSchema())
|
|
||||||
|
|
||||||
metrics.Persist(clock.Now(), 0)
|
metrics.Persist(clock.Now(), 0)
|
||||||
|
|
||||||
db, err := db.Instance.DB()
|
db, err := db.Instance.DB()
|
||||||
|
|
@ -50,14 +48,12 @@ func TestSqliteTimestamp(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateHouseholdProfile(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
|
// make sure test data added starting 00:00 local time
|
||||||
|
clock := clock.NewMock()
|
||||||
clock.Set(now.With(clock.Now()).BeginningOfDay())
|
clock.Set(now.With(clock.Now()).BeginningOfDay())
|
||||||
|
|
||||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
|
||||||
require.NoError(t, metrics.SetupSchema())
|
|
||||||
|
|
||||||
// 2 days of data
|
// 2 days of data
|
||||||
// day 1: 0 ... 95
|
// day 1: 0 ... 95
|
||||||
// day 2: 96 ... 181
|
// day 2: 96 ... 181
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import (
|
||||||
|
|
||||||
"github.com/benbjohnson/clock"
|
"github.com/benbjohnson/clock"
|
||||||
"github.com/evcc-io/evcc/api"
|
"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/server/db"
|
||||||
"github.com/evcc-io/evcc/util"
|
"github.com/evcc-io/evcc/util"
|
||||||
"github.com/evcc-io/evcc/util/config"
|
"github.com/evcc-io/evcc/util/config"
|
||||||
|
|
@ -163,10 +162,9 @@ func TestRequiredBatteryMode(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateHomeConsumption(t *testing.T) {
|
func TestUpdateHomeConsumption(t *testing.T) {
|
||||||
clock := clock.NewMock()
|
|
||||||
|
|
||||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||||
require.NoError(t, metrics.SetupSchema())
|
|
||||||
|
clock := clock.NewMock()
|
||||||
|
|
||||||
s := &Site{
|
s := &Site{
|
||||||
log: util.NewLogger("foo"),
|
log: util.NewLogger("foo"),
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/evcc-io/evcc/server/db"
|
"github.com/evcc-io/evcc/server/db"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
return db.Instance.AutoMigrate(new(GridSession))
|
return db.AutoMigrate(new(GridSession))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
4
server/db/cache/cache.go
vendored
4
server/db/cache/cache.go
vendored
|
|
@ -18,8 +18,8 @@ type Cache struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
return db.Instance.AutoMigrate(new(Cache))
|
return db.AutoMigrate(new(Cache))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,18 +74,18 @@ func New(driver, dsn string) (*gorm.DB, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewInstance(driver, dsn string) error {
|
func NewInstance(driver, dsn string) error {
|
||||||
inst, err := New(strings.ToLower(driver), dsn)
|
db, err := New(strings.ToLower(driver), dsn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance = inst
|
Instance = db
|
||||||
|
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
|
|
||||||
for _, f := range registry {
|
for _, f := range registry {
|
||||||
if err := f(); err != nil {
|
if err := f(db); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
package db
|
package db
|
||||||
|
|
||||||
import "sync"
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
mu sync.Mutex
|
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()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
registry = append(registry, fun)
|
registry = append(registry, fun)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import (
|
||||||
"github.com/evcc-io/evcc/util"
|
"github.com/evcc-io/evcc/util"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"go.yaml.in/yaml/v4"
|
"go.yaml.in/yaml/v4"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrNotFound = errors.New("not found")
|
var ErrNotFound = errors.New("not found")
|
||||||
|
|
@ -34,12 +35,12 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
if err := db.Instance.AutoMigrate(new(setting)); err != nil {
|
if err := db.AutoMigrate(new(setting)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return db.Instance.Find(&settings).Error
|
return db.Find(&settings).Error
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,16 +77,11 @@ func (d *Config) Delete() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
db.Register(func() error {
|
db.Register(func(db *gorm.DB) error {
|
||||||
return SetupSchema()
|
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
|
// NameForID returns a unique config name for the given id
|
||||||
func NameForID(id int) string {
|
func NameForID(id int) string {
|
||||||
return fmt.Sprintf("db:%d", id)
|
return fmt.Sprintf("db:%d", id)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue