Initial database setup including migrations
This commit is contained in:
@@ -13,6 +13,8 @@ type appservice struct {
|
||||
|
||||
Bot bot `yaml:"bot"`
|
||||
|
||||
Database database `yaml:"database"`
|
||||
|
||||
ASToken string `yaml:"as_token"`
|
||||
HSToken string `yaml:"hs_token"`
|
||||
}
|
||||
@@ -34,6 +36,10 @@ func (a *appservice) validate() error {
|
||||
a.Port = 29350
|
||||
}
|
||||
|
||||
if err := a.Database.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := a.Bot.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
58
config/database.go
Normal file
58
config/database.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
log "maunium.net/go/maulogger/v2"
|
||||
|
||||
db "gitlab.com/beeper/discord/database"
|
||||
)
|
||||
|
||||
type database struct {
|
||||
Type string `yaml:"type"`
|
||||
URI string `yaml:"uri"`
|
||||
|
||||
MaxOpenConns int `yaml:"max_open_conns"`
|
||||
MaxIdleConns int `yaml:"max_idle_conns"`
|
||||
}
|
||||
|
||||
func (d *database) validate() error {
|
||||
if d.Type == "" {
|
||||
d.Type = "sqlite3"
|
||||
}
|
||||
|
||||
if d.URI == "" {
|
||||
d.URI = "mautrix-discord.db"
|
||||
}
|
||||
|
||||
if d.MaxOpenConns == 0 {
|
||||
d.MaxOpenConns = 20
|
||||
}
|
||||
|
||||
if d.MaxIdleConns == 0 {
|
||||
d.MaxIdleConns = 2
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *database) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
type rawDatabase database
|
||||
|
||||
raw := rawDatabase{}
|
||||
if err := unmarshal(&raw); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*d = database(raw)
|
||||
|
||||
return d.validate()
|
||||
}
|
||||
|
||||
func (c *Config) CreateDatabase(baseLog log.Logger) (*db.Database, error) {
|
||||
return db.New(
|
||||
c.Appservice.Database.Type,
|
||||
c.Appservice.Database.URI,
|
||||
c.Appservice.Database.MaxOpenConns,
|
||||
c.Appservice.Database.MaxIdleConns,
|
||||
baseLog,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user