To gitea and beyond, let's go(-yco)

This commit is contained in:
2025-11-10 19:12:09 +01:00
parent 8f6133392d
commit 71a031342b
245 changed files with 83994 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
package database
import (
"fmt"
"goyco/internal/config"
"goyco/internal/middleware"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
func connectDB(cfg *config.Config) (*gorm.DB, error) {
dsn := cfg.GetConnectionString()
gormLogger := CreateSecureLogger(!cfg.App.Debug)
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: gormLogger,
})
if err != nil {
return nil, fmt.Errorf("failed to connect to database: %w", err)
}
return db, nil
}
func Connect(cfg *config.Config) (*gorm.DB, error) {
return connectDB(cfg)
}
func ConnectWithMonitoring(cfg *config.Config, monitor middleware.DBMonitor) (*gorm.DB, error) {
db, err := connectDB(cfg)
if err != nil {
return nil, err
}
if monitor != nil {
monitoringPlugin := NewGormDBMonitor(monitor)
if err := db.Use(monitoringPlugin); err != nil {
return nil, fmt.Errorf("failed to add monitoring plugin: %w", err)
}
}
return db, nil
}
func Migrate(db *gorm.DB) error {
if db == nil {
return fmt.Errorf("database connection is nil")
}
err := db.AutoMigrate(
&User{},
&Post{},
&Vote{},
&AccountDeletionRequest{},
&RefreshToken{},
)
if err != nil {
return fmt.Errorf("failed to migrate database: %w", err)
}
return nil
}
func Close(db *gorm.DB) error {
if db == nil {
return nil
}
sqlDB, err := db.DB()
if err != nil {
return fmt.Errorf("failed to get underlying sql.DB: %w", err)
}
return sqlDB.Close()
}