Files
sunhpc-go/internal/cli/init/db.go

57 lines
1.1 KiB
Go

package initcmd
import (
"fmt"
"sunhpc/internal/middler/auth"
"sunhpc/pkg/database"
"sunhpc/pkg/logger"
"github.com/spf13/cobra"
)
func NewInitDBCmd() *cobra.Command {
var force bool
cmd := &cobra.Command{
Use: "db",
Short: "初始化数据库",
Long: `初始化SQLite数据库,创建所有表结构和默认数据。
示例:
sunhpc init db # 初始化数据库
sunhpc init db --force # 强制重新初始化`,
RunE: func(cmd *cobra.Command, args []string) error {
if err := auth.RequireRoot(); err != nil {
return err
}
logger.Debug("执行数据库初始化...")
// 初始化数据库
db, err := database.GetDB()
if err != nil {
return fmt.Errorf("数据库连接失败: %w", err)
}
defer db.Close()
if err := database.InitTables(db, force); err != nil {
logger.Debug(err)
return err
}
// 测试数据库连接
if err := database.TestNodeInsert(db); err != nil {
return fmt.Errorf("数据库测试失败: %w", err)
}
return nil
},
}
cmd.Flags().BoolVarP(
&force, "force", "f", false,
"强制重新初始化")
return cmd
}