package apps import ( "github.com/rosti-cz/apps-api/common" ) func init() { db := common.GetDBConnection() db.AutoMigrate(Label{}) db.AutoMigrate(App{}) } // Get returns one app func Get(name string) (*App, error) { var app App db := common.GetDBConnection() err := db.First(&app).Where("name = ?", name).Error if err != nil { return nil, err } return &app, nil } // List returns all apps located on this node func List() (*[]App, error) { var apps []App db := common.GetDBConnection() err := db.Find(&apps).Error if err != nil { return nil, err } return &apps, nil } // New creates new record about application in the database func New(name string, SSHPort int, HTTPPort int, image string, CPU int, memory int) error { app := App{ Name: name, SSHPort: SSHPort, HTTPPort: HTTPPort, Image: image, CPU: CPU, Memory: memory, } db := common.GetDBConnection() validationErrors := app.Validate() if len(validationErrors) != 0 { return ValidationError{ Errors: validationErrors, } } if err := db.Create(&app).Error; err != nil { return err } return nil } // Update changes value about app in the database func Update(name string, SSHPort int, HTTPPort int, image string, CPU int, memory int) (*App, error) { var app App db := common.GetDBConnection() err := db.First(&app).Where("name = ?", name).Error if err != nil { return &app, err } // Update affected fields if image != "" { app.Image = image } if CPU != 0 { app.CPU = CPU } if memory != 0 { app.Memory = memory } // SSH port and HTTP port cannot be turned off when they are once set if SSHPort != 0 { app.SSHPort = SSHPort } // SSH port and HTTP port cannot be turned off when they are once set if HTTPPort != 0 { app.HTTPPort = HTTPPort } validationErrors := app.Validate() if len(validationErrors) != 0 { return &app, ValidationError{ Errors: validationErrors, } } // Apply the changes err = db.Save(&app).Error return &app, err } // Delete removes records about one app from the database func Delete(name string) error { db := common.GetDBConnection() err := db.Delete(App{}).Where("name = ?", name).Error return err }