Move db and services to pkg
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/dustinpianalto/geeksbot/pkg/database/migrations"
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/golang-migrate/migrate/v4/database/postgres"
|
||||
bindata "github.com/golang-migrate/migrate/v4/source/go_bindata"
|
||||
)
|
||||
|
||||
var (
|
||||
db *sql.DB
|
||||
GuildService guildService
|
||||
UserService userService
|
||||
ChannelService channelService
|
||||
MessageService messageService
|
||||
RequestService requestService
|
||||
PatreonService patreonService
|
||||
ServerService serverService
|
||||
)
|
||||
|
||||
func ConnectDatabase(dbConnString string) {
|
||||
s := bindata.Resource(migrations.AssetNames(),
|
||||
func(name string) ([]byte, error) {
|
||||
return migrations.Asset(name)
|
||||
})
|
||||
var err error
|
||||
db, err = sql.Open("postgres", dbConnString)
|
||||
if err != nil {
|
||||
log.Fatal(fmt.Errorf("Can't connect to the database: %w", err))
|
||||
}
|
||||
log.Println("Database Connected.")
|
||||
db.SetMaxOpenConns(75)
|
||||
db.SetMaxIdleConns(5)
|
||||
db.SetConnMaxLifetime(300)
|
||||
d, err := bindata.WithInstance(s)
|
||||
if err != nil {
|
||||
log.Fatal(fmt.Errorf("cannot load migrations: %w", err))
|
||||
}
|
||||
instance, err := postgres.WithInstance(db, &postgres.Config{})
|
||||
if err != nil {
|
||||
log.Fatal(fmt.Errorf("cannot create db driver: %w", err))
|
||||
}
|
||||
m, err := migrate.NewWithInstance("go-bindatafoo", d, "postgres", instance)
|
||||
if err != nil {
|
||||
log.Fatal(fmt.Errorf("cannot create migration instance: %w", err))
|
||||
}
|
||||
err = m.Up()
|
||||
if err != nil {
|
||||
if err.Error() == "no change" {
|
||||
log.Println(err)
|
||||
} else {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
log.Println("Migrations Run")
|
||||
initServices()
|
||||
log.Println("Services Initialized")
|
||||
}
|
||||
|
||||
func initServices() {
|
||||
GuildService = guildService{db: db}
|
||||
UserService = userService{db: db}
|
||||
ChannelService = channelService{db: db}
|
||||
MessageService = messageService{db: db}
|
||||
PatreonService = patreonService{db: db}
|
||||
RequestService = requestService{db: db}
|
||||
ServerService = serverService{db: db}
|
||||
}
|
||||
Reference in New Issue
Block a user