Files
reloading-manager/backend/database/conn.go
Ron Rise dd383b6fb3
All checks were successful
🧪 ✨ Unit Tests Workflow / 🧪 📜 JavaScript Tests (push) Successful in 7m28s
🧪 ✨ Unit Tests Workflow / 🧪 🐹 GolangCI-Lint (push) Successful in 7m40s
🧪 ✨ Unit Tests Workflow / 🔍 🐹 Go Tests (push) Successful in 10m24s
fix tpyo (#8)
Reviewed-on: Siteworxpro/reloading-manager#8
Co-authored-by: Ron Rise <ron@siteworxpro.com>
Co-committed-by: Ron Rise <ron@siteworxpro.com>
2025-06-10 15:56:03 +00:00

94 lines
2.5 KiB
Go

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 contextKeyType string
const dbContextKey contextKeyType = "dbcontext"
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(hidePassword bool) string {
dbHost := DbHost.GetEnvString("localhost")
dbDatabase := DbDatabase.GetEnvString("loading")
dbUser := DbUser.GetEnvString("postgres")
dbPassword := DbPassword.GetEnvString("password")
extraParams := "?sslmode=require"
if dbHost == "localhost" || dbHost == "127.0.0.1" {
extraParams = "?sslmode=disable"
}
if hidePassword {
dbPassword = "********"
}
return fmt.Sprintf("postgres://%s:%s@%s:5432/%s%s", dbUser, dbPassword, dbHost, dbDatabase, extraParams)
}
func NewWithContext(ctx context.Context) context.Context {
db := GetNewDatabase()
return context.WithValue(ctx, dbContextKey, db)
}
func NewFromContext(ctx context.Context) *Database {
if ok := ctx.Value(dbContextKey); ok != nil {
return ctx.Value(dbContextKey).(*Database)
}
return nil
}
func WithContext(ctx context.Context, database *Database) context.Context {
return context.WithValue(ctx, dbContextKey, database)
}
func GetNewDatabase() *Database {
var dbSingleton Database
conn, dbErr := pgx.Connect(context.Background(), dbSingleton.DSN(false))
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
}