package database import ( "fmt" "os" staffmodel "github.com/ardeman/project-legalgo-go/database/staff" subsmodel "github.com/ardeman/project-legalgo-go/database/subscribe" usermodel "github.com/ardeman/project-legalgo-go/database/user" "gorm.io/driver/postgres" "gorm.io/gorm" ) type DB struct { *gorm.DB } func NewDB() (*DB, error) { var ( host = os.Getenv("DB_HOST") user = os.Getenv("DB_USER") password = os.Getenv("DB_PASSWORD") dbName = os.Getenv("DB_NAME") dbPort = os.Getenv("DB_PORT") ) dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%v sslmode=disable", host, user, password, dbName, dbPort) if dsn == "" { return nil, fmt.Errorf("DATABASE_URL environment is not set") } db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { return nil, fmt.Errorf("failed to connect to database: %w", err) } return &DB{db}, nil } func (db *DB) Migrate() error { // Auto Migrate the User model return db.AutoMigrate( &staffmodel.Staff{}, &subsmodel.SubscribePlan{}, &subsmodel.Subscribe{}, &usermodel.User{}, ) }