62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/uptrace/bun"
|
|
"github.com/uptrace/bun/dialect/pgdialect"
|
|
"github.com/uptrace/bun/driver/pgdriver"
|
|
)
|
|
|
|
type DB struct {
|
|
*bun.DB
|
|
}
|
|
|
|
func (db *DB) Close() error {
|
|
return db.DB.Close()
|
|
}
|
|
|
|
func (db *DB) RegisterModels() []any {
|
|
models := []any{
|
|
(*RolePermission)(nil),
|
|
(*UserRole)(nil),
|
|
(*SeasonLeague)(nil),
|
|
(*TeamParticipation)(nil),
|
|
(*TeamRoster)(nil),
|
|
(*User)(nil),
|
|
(*DiscordToken)(nil),
|
|
(*Season)(nil),
|
|
(*League)(nil),
|
|
(*Team)(nil),
|
|
(*Role)(nil),
|
|
(*Permission)(nil),
|
|
(*AuditLog)(nil),
|
|
(*Fixture)(nil),
|
|
(*FixtureSchedule)(nil),
|
|
(*Player)(nil),
|
|
(*FixtureResult)(nil),
|
|
(*FixtureResultPlayerStats)(nil),
|
|
}
|
|
db.RegisterModel(models...)
|
|
return models
|
|
}
|
|
|
|
func NewDB(cfg *Config) *DB {
|
|
dsn := fmt.Sprintf("postgres://%s:%s@%s:%v/%s?sslmode=%s",
|
|
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DB, cfg.SSL)
|
|
sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(dsn)))
|
|
|
|
sqldb.SetMaxOpenConns(25)
|
|
sqldb.SetMaxIdleConns(10)
|
|
sqldb.SetConnMaxLifetime(5 * time.Minute)
|
|
sqldb.SetConnMaxIdleTime(5 * time.Minute)
|
|
|
|
db := &DB{
|
|
bun.NewDB(sqldb, pgdialect.New()),
|
|
}
|
|
db.RegisterModels()
|
|
return db
|
|
}
|