package settings import ( "errors" "fmt" "gorm.io/gorm" "lst.net/internal/models" "lst.net/pkg/logger" ) var seedConfigData = []models.Settings{ {Name: "serverPort", Description: "The port the server will listen on if not running in docker", Value: "4000", Enabled: true, AppService: "server"}, {Name: "server", Description: "The server we will use when connecting to the alplaprod sql", Value: "usmcd1vms006", Enabled: true, AppService: "server"}, {Name: "timezone", Value: "America/Chicago", Description: "What time zone is the server in this is used for cronjobs and some other time stuff", AppService: "server", Enabled: true}, {Name: "dbUser", Value: "alplaprod", Description: "What is the db userName", AppService: "server", Enabled: true}, {Name: "dbPass", Value: "b2JlbGl4", Description: "What is the db password", AppService: "server", Enabled: true}, {Name: "tcpPort", Value: "2222", Description: "TCP port for printers to connect send data and the zedra cameras", AppService: "server", Enabled: true}, {Name: "prolinkCheck", Value: "1", Description: "Will prolink be considered to check if matches, maninly used in plants that do not fully utilize prolink + ocp", AppService: "production", Enabled: true}, {Name: "bookin", Value: "1", Description: "do we want to book in after a label is printed", AppService: "ocp", Enabled: true}, {Name: "dbServer", Value: "usmcd1vms036", Description: "What server is the prod db on?", AppService: "server", Enabled: true}, {Name: "printDelay", Value: "90", Description: "How long in seconds between prints", AppService: "ocp", Enabled: true}, {Name: "plantToken", Value: "test3", Description: "What is the plant token", AppService: "server", Enabled: true}, {Name: "dualPrinting", Value: "0", Description: "Dose the plant have 2 machines that go to 1?", AppService: "ocp", Enabled: true}, {Name: "ocmeService", Value: "0", Description: "Is the ocme service enabled. this is gernerally only for Dayton.", AppService: "ocme", Enabled: true}, {Name: "fifoCheck", Value: "45", Description: "How far back do we want to check for fifo default 45, putting 0 will ignore.", AppService: "ocme", Enabled: true}, {Name: "dayCheck", Value: "3", Description: "how many days +/- to check for shipments in alplaprod", AppService: "ocme", Enabled: true}, {Name: "maxLotPerTruck", Value: "3", Description: "How mant lots can we have per truck?", AppService: "ocme", Enabled: true}, {Name: "monitorAddress", Value: "8", Description: "What address is monitored to be limited to the amount of lots that can be added to a truck.", AppService: "ocme", Enabled: true}, {Name: "ocmeCycleCount", Value: "1", Description: "Are we allowing ocme cycle counts?", AppService: "ocme", Enabled: true}, {Name: "devDir", Value: "", Description: "This is the dev dir and strictly only for updating the servers.", AppService: "server", Enabled: true}, {Name: "demandMGTActivated", Value: "0", Description: "Do we allow for new fake edi?", AppService: "logistics", Enabled: true}, {Name: "qualityRequest", Value: "0", Description: "quality request module?", AppService: "quality", Enabled: true}, {Name: "ocpLogsCheck", Value: "4", Description: "How long do we want to allow logs to show that have not been cleared?", AppService: "ocp", Enabled: true}, {Name: "inhouseDelivery", Value: "0", Description: "Are we doing auto inhouse delivery?", AppService: "ocp", Enabled: true}, // dyco settings {Name: "dycoConnect", Value: "0", Description: "Are we running the dyco system?", AppService: "dycp", Enabled: true}, {Name: "dycoPrint", Value: "0", Description: "Are we using the dyco to get the labels or the rfid?", AppService: "dyco", Enabled: true}, {Name: "strapperCheck", Value: "1", Description: "Are we monitoring the strapper for faults?", AppService: "dyco", Enabled: true}, // ocp {Name: "ocpActive", Value: `1`, Description: "Are we pritning on demand?", AppService: "ocp", Enabled: true}, {Name: "ocpCycleDelay", Value: `10`, Description: "How long between printer cycles do we want to monitor.", AppService: "ocp", Enabled: true}, {Name: "pNgAddress", Value: `139`, Description: "What is the address for p&g so we can make sure we have the correct fake edi forcast going in.", AppService: "logisitcs", Enabled: true}, {Name: "scannerID", Value: `500`, Description: "What scanner id will we be using for the app", AppService: "logistics", Enabled: true}, {Name: "scannerPort", Value: `50002`, Description: "What port instance will we be using?", AppService: "logistics", Enabled: true}, {Name: "stagingReturnLocations", Value: `30125,31523`, Description: "What are the staging location IDs we will use to select from. seperated by commas", AppService: "logistics", Enabled: true}, {Name: "testingApiFunction", Value: `1`, Description: "This is a test to validate if we set to 0 it will actaully not allow the route", AppService: "logistics", Enabled: true}, } func SeedSettings(db *gorm.DB, log *logger.CustomLogger) error { for _, cfg := range seedConfigData { var existing models.Settings if err := db.Unscoped().Where("name = ?", cfg.Name).First(&existing).Error; err == nil { if existing.DeletedAt.Valid { // Undelete by setting DeletedAt to NULL if err := db.Unscoped().Model(&existing).Update("DeletedAt", gorm.DeletedAt{}).Error; err != nil { log.Error("Failed to undelete settings", "settings", map[string]interface{}{ "name": cfg.Name, "error": err, }) return nil } } if errors.Is(err, gorm.ErrRecordNotFound) { if err := db.Create(&cfg).Error; err != nil { log.Error("Failed to seed settings", "settings", map[string]interface{}{ "name": cfg.Name, "error": err, }) } } // // Try to find config by unique Name // result := db.Where("Name =?", cfg.Name).First(&existing) // if result.Error != nil { // if result.Error == gorm.ErrRecordNotFound && cfg.Enabled { // // not here lets add it // if err := db.Create(&cfg).Error; err != nil && !existing.DeletedAt.Valid { // log.Error("Failed to seed settings", "settings", map[string]interface{}{ // "name": cfg.Name, // "error": err, // }) // } // //log.Printf("Seeded new config: %s", cfg.Name) // } else { // // Some other error // return result.Error // } } else { // remove the setting if we change to false this will help with future proofing our seeder in the event we need to add it back if cfg.Enabled { existing.Description = cfg.Description existing.Name = cfg.Name existing.AppService = cfg.AppService if err := db.Save(&existing).Error; err != nil { log.Error("Failed to update ettings.", "settings", map[string]interface{}{ "name": cfg.Name, "error": err, }) return err } } else { // we delete the setting so its no longer there if err := db.Delete(&existing).Error; err != nil { log.Error("Failed to delete ettings.", "settings", map[string]interface{}{ "name": cfg.Name, "error": err, }) return err } settingDelete := fmt.Sprintf("Updated existing config: %s", cfg.Name) log.Info(settingDelete, "settings", map[string]interface{}{}) } //log.Printf("Updated existing config: %s", cfg.Name) } } log.Info("All settings added or updated.", "settings", map[string]interface{}{}) return nil }