You've already forked reloading-manager
Some checks failed
🧪 ✨ Unit Tests Workflow / 🧪 📜 JavaScript Tests (push) Successful in 1m46s
🧪 ✨ Unit Tests Workflow / 🧪 🐹 GolangCI-Lint (push) Successful in 4m20s
🧪 ✨ Unit Tests Workflow / 🔍 🐹 Go Tests (push) Successful in 5m48s
🏗️ ✨ Build Workflow / 🖥️ 🔨 Build Backend (push) Failing after 4m31s
🏗️ ✨ Build Workflow / 🖼️ 🔨 Build Frontend (push) Successful in 6m15s
🏗️ ✨ Build Workflow / 🚀 ✨ Deploy Application (push) Has been skipped
94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"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"
|
|
"gitea.siteworxpro.com/golang-packages/utilities/Env"
|
|
"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
|
|
}
|