package control_case import ( "github.com/che4web/go4rest" "github.com/gin-gonic/gin" "gorm.io/gorm" ) func RegisterApp(r *gin.Engine, db *gorm.DB) { db.AutoMigrate(&ControlCase{}) db.AutoMigrate(&InitialCondition{}) db.AutoMigrate(&Params{}) migrateParamsPrToSc(db) controller := NewControlCaseController(db) params := NewParamsController(db) initialConditions := NewInitialConditionController(db) go4rest.RegisterCRUDRoutes(r, "control_case", controller) go4rest.RegisterCRUDRoutes(r, "params", params) go4rest.RegisterCRUDRoutes(r, "initial_condition", initialConditions) r.POST("/api/control_case/launch", controller.Launch) r.POST("/api/control_case/:id/restart", controller.Restart) r.GET("/api/control_case/:id/chart-data", controller.ChartData) r.GET("/api/control_case/:id/psi-spectrum", controller.PSISpectrum) r.GET("/api/control_case/:id/field-map", controller.FieldMap) r.POST("/api/control_case/:id/initial-condition", controller.CreateInitialCondition) numJobs := 1 //jobs := make(chan Params, numJobs) results := make(chan int, numJobs) go RunControllWorker(db, results) } func migrateParamsPrToSc(db *gorm.DB) { type columnInfo struct { Name string `gorm:"column:name"` } var columns []columnInfo if err := db.Raw("PRAGMA table_info(params)").Scan(&columns).Error; err != nil { return } hasPr := false hasSc := false for _, column := range columns { switch column.Name { case "pr": hasPr = true case "sc": hasSc = true } } if hasPr && hasSc { db.Exec("UPDATE params SET sc = pr WHERE sc IS NULL OR sc = 0") } }