This commit is contained in:
2025-11-03 12:24:01 +02:00
commit 0806865287
177 changed files with 18453 additions and 0 deletions

View 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
}

View 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
}

View 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
}