apifiber/database/database.go

103 lines
2.4 KiB
Go

package database
import (
"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")
// DBURL := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_NAME"))
//DBURL := "postgres://pcast:@407Smc837@177.153.50.98:5432/pcast"
DBURL := fmt.Sprintf("%s://%s:%s@%s:%s/%s", os.Getenv("DB_DRIVER"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_NAME"))
log.Println("Opening connection to database")
// db, err := gorm.Open(mysql.Open(DBURL), &gorm.Config{
// Logger: logger.Default.LogMode(logger.Silent),
// })
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",
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: "pcast@pcastive.com",
CompanyName: "PCast",
Password: passwd,
Channel: "pcast",
UserType: "A",
Blocked: "N",
Cancelled: "N",
CreatedBy: "Auto",
}
db.Create(&user)
}
DB = db
return nil
}