You've already forked reloading-manager
Reviewed-on: Siteworxpro/reloading-manager#8 Co-authored-by: Ron Rise <ron@siteworxpro.com> Co-committed-by: Ron Rise <ron@siteworxpro.com>
94 lines
2.5 KiB
Go
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
|
|
}
|