43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"time"
|
|
|
|
"git.haelnorr.com/h/oslstats/internal/config"
|
|
"git.haelnorr.com/h/oslstats/internal/db"
|
|
"github.com/uptrace/bun"
|
|
"github.com/uptrace/bun/dialect/pgdialect"
|
|
"github.com/uptrace/bun/driver/pgdriver"
|
|
)
|
|
|
|
func setupBun(cfg *config.Config) (conn *bun.DB, close func() error) {
|
|
dsn := fmt.Sprintf("postgres://%s:%s@%s:%v/%s?sslmode=%s",
|
|
cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.DB, cfg.DB.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)
|
|
|
|
conn = bun.NewDB(sqldb, pgdialect.New())
|
|
close = sqldb.Close
|
|
return conn, close
|
|
}
|
|
|
|
func registerDBModels(conn *bun.DB) {
|
|
models := []any{
|
|
(*db.RolePermission)(nil),
|
|
(*db.UserRole)(nil),
|
|
(*db.User)(nil),
|
|
(*db.DiscordToken)(nil),
|
|
(*db.Season)(nil),
|
|
(*db.Role)(nil),
|
|
(*db.Permission)(nil),
|
|
(*db.AuditLog)(nil),
|
|
}
|
|
conn.RegisterModel(models...)
|
|
}
|