mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-16 08:55:31 +01:00
rename db to database
This commit is contained in:
77
utils/database/db.go
Normal file
77
utils/database/db.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"erupe-ce/config"
|
||||
"erupe-ce/utils/logger"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "github.com/lib/pq" // Postgres driver
|
||||
)
|
||||
|
||||
var (
|
||||
instance *sqlx.DB
|
||||
once sync.Once
|
||||
dbLogger logger.Logger
|
||||
)
|
||||
|
||||
// InitDB initializes the database connection pool as a singleton
|
||||
func InitDB(config *config.Config) (*sqlx.DB, error) {
|
||||
dbLogger = logger.Get().Named("database")
|
||||
var err error
|
||||
once.Do(func() {
|
||||
// Create the postgres DB pool.
|
||||
connectString := fmt.Sprintf(
|
||||
"host='%s' port='%d' user='%s' password='%s' dbname='%s' sslmode=disable",
|
||||
config.Database.Host,
|
||||
config.Database.Port,
|
||||
config.Database.User,
|
||||
config.Database.Password,
|
||||
config.Database.Database,
|
||||
)
|
||||
|
||||
instance, err = sqlx.Open("postgres", connectString)
|
||||
if err != nil {
|
||||
return // Stop here if there's an error opening the database
|
||||
}
|
||||
|
||||
// Test the DB connection.
|
||||
err = instance.Ping()
|
||||
if err != nil {
|
||||
return // Stop here if there's an error pinging the database
|
||||
}
|
||||
dbLogger.Info("Database: Started successfully")
|
||||
|
||||
// Clear stale data
|
||||
if config.DebugOptions.ProxyPort == 0 {
|
||||
_ = instance.MustExec("DELETE FROM sign_sessions")
|
||||
}
|
||||
_ = instance.MustExec("DELETE FROM servers")
|
||||
_ = instance.MustExec(`UPDATE guild_characters SET treasure_hunt=NULL`)
|
||||
|
||||
// Clean the DB if the option is on.
|
||||
if config.DebugOptions.CleanDB {
|
||||
dbLogger.Info("Database: Started clearing...")
|
||||
cleanDB(instance)
|
||||
dbLogger.Info("Database: Finished clearing")
|
||||
}
|
||||
})
|
||||
return instance, err
|
||||
}
|
||||
|
||||
func GetDB() (*sqlx.DB, error) {
|
||||
if instance == nil {
|
||||
return nil, fmt.Errorf("database not initialized")
|
||||
}
|
||||
return instance, nil
|
||||
}
|
||||
|
||||
// Temporary DB auto clean on startup for quick development & testing.
|
||||
func cleanDB(db *sqlx.DB) {
|
||||
_ = db.MustExec("DELETE FROM guild_characters")
|
||||
_ = db.MustExec("DELETE FROM guilds")
|
||||
_ = db.MustExec("DELETE FROM characters")
|
||||
_ = db.MustExec("DELETE FROM users")
|
||||
}
|
||||
Reference in New Issue
Block a user