apifiber/database/database.go

110 lines
2.3 KiB
Go

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
}