Files
envy/cmd/utils/db.go

100 lines
2.2 KiB
Go

package utils
import (
"errors"
"path"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type Project struct {
ID uint `gorm:"primaryKey"`
Name string
Environments []Environment
}
type Environment struct {
ID uint `gorm:"primaryKey"`
Name string
Data string
ProjectID uint
Project Project `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}
var DB *gorm.DB
func InitDb() {
var openErr error
DB, openErr = gorm.Open(sqlite.Open(path.Join(EnvyPath, "envy.db")), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if openErr != nil {
ErrPrint("Error while opening database:", openErr.Error())
}
}
func MigrateDb() {
err := DB.AutoMigrate(&Project{}, &Environment{})
if err != nil {
panic(err)
}
}
func GetProjects() ([]Project, error) {
InitDb()
var dbProjects []Project
result := DB.Find(&dbProjects)
if result.Error != nil {
return nil, errors.New("Some error occured: " + result.Error.Error())
}
return dbProjects, nil
}
func GetProject(name string) (Project, error) {
InitDb()
var dbProject Project
result := DB.Where("name = ?", name).First(&dbProject)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return Project{}, errors.New("Project with the name " + name + " not found in the database")
} else {
return Project{}, errors.New("Some error occured: " + result.Error.Error())
}
}
return dbProject, nil
}
func GetEnvironments(project uint) ([]Environment, error) {
InitDb()
var dbEnvs []Environment
result := DB.Where("project_id = ?", project).Find(&dbEnvs)
if result.Error != nil {
return nil, errors.New("Some error occured: " + result.Error.Error())
}
return dbEnvs, nil
}
func GetEnvironment(project uint, environment string) (Environment, error) {
InitDb()
var dbEnv Environment
result := DB.Where("project_id = ? AND name = ?", project, environment).First(&dbEnv)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return Environment{}, errors.New("Environment with the name " + environment + " not found in the database")
} else {
return Environment{}, errors.New("Some error occured: " + result.Error.Error())
}
}
return dbEnv, nil
}