package database import ( "context" "fmt" "git.siteworxpro.com/packages/go/utilities/Env" "git.siteworxpro.com/reloading-manager/backend/models/bullets" "git.siteworxpro.com/reloading-manager/backend/models/loads" "git.siteworxpro.com/reloading-manager/backend/models/manufacturer" "git.siteworxpro.com/reloading-manager/backend/models/powder" "git.siteworxpro.com/reloading-manager/backend/models/primers" "github.com/jackc/pgx/v5" "log" ) const ( DbHost Env.EnvironmentVariable = "DB_HOST" DbDatabase Env.EnvironmentVariable = "DB_DATABASE" DbUser Env.EnvironmentVariable = "DB_USER" DbPassword Env.EnvironmentVariable = "DB_PASSWORD" ) type Database struct { Db *pgx.Conn connected bool databaseName string Bullets *bullets.Queries Manufacturer *manufacturer.Queries Powder *powder.Queries Primer *primers.Queries Loads *loads.Queries } func (*Database) DSN() string { dbHost := DbHost.GetEnvString("localhost") dbDatabase := DbDatabase.GetEnvString("loading") dbUser := DbUser.GetEnvString("postgres") dbPassword := DbPassword.GetEnvString("password") extraParams := "?sslmode=disable" return fmt.Sprintf("postgres://%s:%s@%s:5432/%s%s", dbUser, dbPassword, dbHost, dbDatabase, extraParams) } func GetNewDatabase() *Database { var dbSingleton Database conn, dbErr := pgx.Connect(context.Background(), dbSingleton.DSN()) if dbErr != nil { log.Fatal(dbErr) } dbSingleton.Db = conn dbSingleton.connected = true dbSingleton.databaseName = DbDatabase.GetEnvString("loading") dbSingleton.Bullets = bullets.New(dbSingleton.Db) dbSingleton.Manufacturer = manufacturer.New(dbSingleton.Db) dbSingleton.Powder = powder.New(dbSingleton.Db) dbSingleton.Primer = primers.New(dbSingleton.Db) dbSingleton.Loads = loads.New(dbSingleton.Db) return &dbSingleton }