package database import ( "api/config" "api/globals" "api/models" "api/utils" "fmt" "log" "os" "github.com/joho/godotenv" "gorm.io/driver/postgres" "gorm.io/gorm" ) // Our database var DB *gorm.DB // ConnectDB - returns a pointer to a new database connection func ConnectDB() error { var erre error log.Println("Getting environment values") erre = godotenv.Load() if erre != nil { log.Printf("Error getting env, not comming through %v\n", erre) return erre } globals.API_RELEASE = os.Getenv("API_RELEASE") driver := config.Configurations.Data.DB_DRIVER user := config.Configurations.Data.DB_USER password := config.Configurations.Data.DB_PASSWORD host := config.Configurations.Data.DB_HOST dbport := config.Configurations.Data.DB_PORT dbname := config.Configurations.Data.DB_NAME DBURL := fmt.Sprintf("%s://%s:%s@%s:%d/%s", driver, user, password, host, dbport, dbname) log.Println("Opening connection to database") db, err := gorm.Open(postgres.Open(DBURL), &gorm.Config{}) if err != nil { return err } log.Println("Migrating database tables") if result := db.AutoMigrate(&models.User{}); result != nil { return result } if result := db.AutoMigrate(&models.Event{}); result != nil { return result } if result := db.AutoMigrate(&models.Server{}); result != nil { return result } // Count how many servers we have on the database. If none, creates our initial server. var servers []models.Server db.Find(&servers) if len(servers) == 0 { server := models.Server{ Name: "Pcast Main Server", Subdomain: "s1", IP: "177.153.50.98", } db.Create(&server) } // Count how many users we have on the database. If none, creates our initial admin user. var users []models.User db.Find(&users) if len(users) == 0 { passwd, _ := utils.HashPassword("123456") user := models.User{ Name: "Pcast Admin", Email: "pcastlive@pcastive.com", CompanyName: "PCast", Password: passwd, Url: "https://pcastive.com", CpfCnpj: "49.083.957/0001-38", Channel: "pcastlive", UserType: "A", Blocked: "N", Cancelled: "N", CreatedBy: "Auto", ServerId: 1, } db.Create(&user) } DB = db return nil }