You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-fly/cmd/install.go

72 lines
1.8 KiB

package cmd
import (
"github.com/spf13/cobra"
"github.com/taoshihan1991/imaptool/models"
"github.com/taoshihan1991/imaptool/tools"
"log"
"os"
"strings"
)
var installCmd = &cobra.Command{
Use: "install",
Short: "Initialize database and import data", // More precise description
Run: func(cmd *cobra.Command, args []string) {
install()
},
}
func install() {
// Check if already installed
if ok, _ := tools.IsFileNotExist("./install.lock"); !ok {
log.Println("Please remove ./install.lock file to reinstall")
os.Exit(1)
}
// Verify required files exist
sqlFile := "import.sql"
dataExists, _ := tools.IsFileExist(sqlFile)
if !dataExists {
log.Println("Configuration file config/mysql.json or database import file import.sql not found")
os.Exit(1)
}
// Execute SQL statements
sqls, err := os.ReadFile(sqlFile)
if err != nil {
log.Printf("Failed to read SQL file %s: %v\n", sqlFile, err)
os.Exit(1)
}
sqlArr := strings.Split(string(sqls), ";")
for _, sql := range sqlArr {
sql = strings.TrimSpace(sql)
if sql == "" {
continue
}
err := models.Execute(sql)
if err != nil {
log.Printf("SQL execution failed: %s\nError: %v\n", sql, err)
log.Println("Database initialization failed - please check SQL statements")
os.Exit(1)
}
log.Printf("Executed successfully: %s\n", sql)
}
// Create installation lock file
installFile, err := os.OpenFile("./install.lock", os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
log.Printf("Failed to create lock file: %v\n", err)
os.Exit(1)
}
defer installFile.Close()
_, err = installFile.WriteString("gofly live chat installation complete")
if err != nil {
log.Printf("Failed to write lock file: %v\n", err)
os.Exit(1)
}
log.Println("Database initialization completed successfully")
}