updates
This commit is contained in:
34
server/internal/database/db.go
Normal file
34
server/internal/database/db.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// internal/database/db.go
|
||||
package database
|
||||
|
||||
import (
|
||||
"github.com/redis/go-redis/v9"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
pgDB *gorm.DB
|
||||
redisClient *redis.Client
|
||||
)
|
||||
|
||||
func InitDatabases(pgConfig PostgresConfig, redisConfig RedisConfig) error {
|
||||
var err error
|
||||
pgDB, err = NewPostgresConnection(pgConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
redisClient, err = NewRedisConnection(redisConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetPostgres() *gorm.DB {
|
||||
return pgDB
|
||||
}
|
||||
|
||||
func GetRedis() *redis.Client {
|
||||
return redisClient
|
||||
}
|
||||
64
server/internal/database/postgresql.go
Normal file
64
server/internal/database/postgresql.go
Normal file
@@ -0,0 +1,64 @@
|
||||
// internal/database/postgresql.go
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"go-server/internal/config"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PostgresConfig struct {
|
||||
Host string
|
||||
Port string
|
||||
User string
|
||||
Password string
|
||||
DBName string
|
||||
SSLMode string
|
||||
}
|
||||
|
||||
func NewPostgresConfig() PostgresConfig {
|
||||
cfg, err := config.LoadConfig()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to load postgres config: %v", err)
|
||||
}
|
||||
|
||||
return PostgresConfig{
|
||||
Host: cfg.Database.Host,
|
||||
Port: cfg.Database.Port,
|
||||
User: cfg.Database.User,
|
||||
Password: cfg.Database.Password,
|
||||
DBName: cfg.Database.Name,
|
||||
SSLMode: cfg.Database.SSLMode,
|
||||
}
|
||||
}
|
||||
|
||||
func NewPostgresConnection(config PostgresConfig) (*gorm.DB, error) {
|
||||
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s",
|
||||
config.Host, config.User, config.Password, config.DBName, config.Port, config.SSLMode)
|
||||
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
||||
PrepareStmt: true,
|
||||
SkipDefaultTransaction: true,
|
||||
// Logger can be enabled if needed for debugging
|
||||
// Logger: logger.Default.LogMode(logger.Info),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to database: %w", err)
|
||||
}
|
||||
|
||||
// Configure database/sql connection pool
|
||||
sqlDB, err := db.DB()
|
||||
if err == nil {
|
||||
sqlDB.SetMaxIdleConns(10)
|
||||
sqlDB.SetMaxOpenConns(50)
|
||||
sqlDB.SetConnMaxLifetime(60 * time.Minute)
|
||||
sqlDB.SetConnMaxIdleTime(10 * time.Minute)
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
||||
31
server/internal/database/redis.go
Normal file
31
server/internal/database/redis.go
Normal file
@@ -0,0 +1,31 @@
|
||||
// internal/database/redis.go
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
type RedisConfig struct {
|
||||
Addr string
|
||||
Password string
|
||||
DB int
|
||||
}
|
||||
|
||||
func NewRedisConnection(config RedisConfig) (*redis.Client, error) {
|
||||
client := redis.NewClient(&redis.Options{
|
||||
Addr: config.Addr,
|
||||
Password: config.Password,
|
||||
DB: config.DB,
|
||||
})
|
||||
|
||||
// Test connection
|
||||
ctx := context.Background()
|
||||
if err := client.Ping(ctx).Err(); err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to redis: %w", err)
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
Reference in New Issue
Block a user