Initial commit

This commit is contained in:
unclesam committed 2026-07-07 16:39:54 +08:00
commit 141baa4e76
45 files changed
+4021

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
package main
import (
"os"
"os/exec"
"github.com/spf13/cobra"
)
var genCmd = &cobra.Command{
Use: "gen",
Short: "生成 Ent ORM 的模板代码",
Run: func(cmd *cobra.Command, args []string) {
println("正在运行 go generate ./internal/ent...")
c := exec.Command("go", "generate", "./internal/ent")
c.Stdout = os.Stdout
c.Stderr = os.Stderr
if err := c.Run(); err != nil {
println("代码生成失败: " + err.Error())
return
}
println("Ent ORM 代码生成成功!")
},
}
func init() {
rootCmd.AddCommand(genCmd)
}
+13
View File
@@ -0,0 +1,13 @@
package main
import (
"fmt"
"os"
)
func main() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
+35
View File
@@ -0,0 +1,35 @@
package main
import (
"context"
"ent-scaffold/internal/db"
"ent-scaffold/internal/global"
"github.com/spf13/cobra"
"go.uber.org/zap"
)
var migrateCmd = &cobra.Command{
Use: "migrate",
Short: "执行数据库 Schema 自动迁移",
Run: func(cmd *cobra.Command, args []string) {
err := db.Init(global.Config.Database.Driver, global.Config.Database.Dsn())
if err != nil {
global.Log.Fatal("连接数据库失败", zap.Error(err))
}
defer db.Close()
global.Log.Info("开始执行数据库 Schema 自动迁移...")
ctx := context.Background()
// 直接使用 db.Client 跨包调用
if err := db.Client.Schema.Create(ctx); err != nil {
global.Log.Fatal("Schema 迁移失败", zap.Error(err))
}
global.Log.Info("数据库 Schema 迁移执行完毕!")
},
}
func init() {
rootCmd.AddCommand(migrateCmd)
}
+35
View File
@@ -0,0 +1,35 @@
package main
import (
"ent-scaffold/internal/conf"
"ent-scaffold/internal/global"
"ent-scaffold/internal/logger"
"github.com/spf13/cobra"
)
var cfgFile string
var rootCmd = &cobra.Command{
Use: "ent-scaffold",
Short: "ent-scaffold 命令行脚手架服务",
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
cfg, err := conf.LoadConfig(cfgFile)
if err != nil {
return err
}
global.Config = cfg
log, err := logger.Init(cfg.Logger)
if err != nil {
return err
}
global.Log = log
return nil
},
}
func init() {
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "configs/config.yaml", "指定 YAML 配置文件路径")
}
+31
View File
@@ -0,0 +1,31 @@
package main
import (
"ent-scaffold/internal/db"
"ent-scaffold/internal/global"
"ent-scaffold/internal/server"
"github.com/spf13/cobra"
"go.uber.org/zap"
)
var serverCmd = &cobra.Command{
Use: "server",
Short: "启动 Web API 接口服务",
Run: func(cmd *cobra.Command, args []string) {
// 初始化 db 包
err := db.Init(global.Config.Database.Driver, global.Config.Database.Dsn())
if err != nil {
global.Log.Fatal("数据库连接失败", zap.Error(err))
}
defer db.Close()
global.Log.Info("数据库初始化成功,正在启动 Web 服务...")
// 启动 Gin 服务
server.Run()
},
}
func init() {
rootCmd.AddCommand(serverCmd)
}
+63
View File
@@ -0,0 +1,63 @@
package main
import (
"bufio"
"context"
"ent-scaffold/internal/db"
"ent-scaffold/internal/global"
"fmt"
"os"
"strings"
"github.com/spf13/cobra"
"go.uber.org/zap"
)
var userCmd = &cobra.Command{
Use: "user",
Short: "后台用户管理工具",
}
var userCreateCmd = &cobra.Command{
Use: "create",
Short: "交互式创建一个管理员用户",
Run: func(cmd *cobra.Command, args []string) {
err := db.Init(global.Config.Database.Driver, global.Config.Database.Dsn())
if err != nil {
global.Log.Fatal("连接数据库失败", zap.Error(err))
}
defer db.Close()
reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入用户名: ")
username, _ := reader.ReadString('\n')
username = strings.TrimSpace(username)
fmt.Print("请输入密码: ")
password, _ := reader.ReadString('\n')
password = strings.TrimSpace(password)
if username == "" || password == "" {
fmt.Println("用户名和密码不能为空")
return
}
ctx := context.Background()
// 直接使用 db.Client 跨包调用并创建数据
u, err := db.Client.User.Create().
// 根据您的 schema 字段做适当的设定,如:
// SetUsername(username).
// SetPassword(password).
Save(ctx)
if err != nil {
global.Log.Error("创建用户失败", zap.Error(err))
fmt.Println("用户创建失败: ", err.Error())
return
}
fmt.Printf("✨ 用户创建成功!ID: %d, 用户名: %s\n", u.ID, username)
},
}
func init() {
userCmd.AddCommand(userCreateCmd)
rootCmd.AddCommand(userCmd)
}