diff --git a/beego-backend/beego-backend b/beego-backend/beego-backend new file mode 100755 index 0000000..fa2e484 Binary files /dev/null and b/beego-backend/beego-backend differ diff --git a/beego-backend/common/database.go b/beego-backend/common/database.go new file mode 100644 index 0000000..3f7fe19 --- /dev/null +++ b/beego-backend/common/database.go @@ -0,0 +1,96 @@ +package common + +import ( + "database/sql" + "fmt" + "log" + + _ "github.com/mattn/go-sqlite3" +) + +var DB *sql.DB + +// InitDatabase 初始化sqlite3数据库 +func InitDatabase() error { + var err error + DB, err = sql.Open("sqlite3", "data.db") + if err != nil { + return fmt.Errorf("连接数据库失败: %v", err) + } + + if err = DB.Ping(); err != nil { + return fmt.Errorf("数据库连接测试失败: %v", err) + } + + // 创建表结构 + if err = createTables(); err != nil { + return fmt.Errorf("创建表结构失败: %v", err) + } + + return nil +} + +// createTables 创建表结构 +func createTables() error { + tables := []string{ + `CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username VARCHAR(100) NOT NULL UNIQUE, + password VARCHAR(100) NOT NULL, + email VARCHAR(100), + is_active BOOLEAN NOT NULL DEFAULT 1 + )`, + } + + for _, table := range tables { + if _, err := DB.Exec(table); err != nil { + return err + } + } + + // 创建默认管理员用户 + //createDefaultUser() + + fmt.Println("✅ 数据库表创建完成") + return nil +} + +// createDefaultUser 创建默认管理员用户 +func createDefaultUser() { + var count int + err := DB.QueryRow("SELECT COUNT(*) FROM users").Scan(&count) + if err != nil || count > 0 { + return + } + + // 插入默认管理员用户 + _, err = DB.Exec(`INSERT INTO users (username, password, email, is_active) + VALUES (?, ?, ?, ?)`, + "admin", "123456", "admin@example.com", true) + + if err != nil { + log.Printf("创建默认用户失败: %v", err) + } else { + fmt.Println("✅ 创建默认管理员用户成功") + } +} + +// Insert 插入数据 +func Insert(sql string, args ...interface{}) (sql.Result, error) { + return DB.Exec(sql, args...) +} + +// Update 更新数据 +func Update(sql string, args ...interface{}) (sql.Result, error) { + return DB.Exec(sql, args...) +} + +// Delete 删除数据 +func Delete(sql string, args ...interface{}) (sql.Result, error) { + return DB.Exec(sql, args...) +} + +// Select 查询数据 +func Select(sql string, args ...interface{}) (*sql.Rows, error) { + return DB.Query(sql, args...) +} diff --git a/beego-backend/common/gost_util.go b/beego-backend/common/gost_util.go new file mode 100644 index 0000000..805d0c7 --- /dev/null +++ b/beego-backend/common/gost_util.go @@ -0,0 +1 @@ +package common diff --git a/beego-backend/common/res_util.go b/beego-backend/common/res_util.go new file mode 100644 index 0000000..3c63d65 --- /dev/null +++ b/beego-backend/common/res_util.go @@ -0,0 +1,8 @@ +package common + +type ResponseResult struct { + Code int64 `json:"code"` + Success bool `json:"success"` + Message string `json:"message"` + Data interface{} `json:"data"` +} diff --git a/beego-backend/common/web_socket_util.go b/beego-backend/common/web_socket_util.go new file mode 100644 index 0000000..805d0c7 --- /dev/null +++ b/beego-backend/common/web_socket_util.go @@ -0,0 +1 @@ +package common diff --git a/beego-backend/conf/app.conf b/beego-backend/conf/app.conf new file mode 100644 index 0000000..03748fc --- /dev/null +++ b/beego-backend/conf/app.conf @@ -0,0 +1,11 @@ +appname = beego-backend +httpport = 8080 +runmode = dev +autorender = false +copyrequestbody = true +EnableDocs = true + +# 数据库配置 +db_type = sqlite3 +db_conn = data.db +db_debug = true diff --git a/beego-backend/controllers/base_controller.go b/beego-backend/controllers/base_controller.go new file mode 100644 index 0000000..3cb0481 --- /dev/null +++ b/beego-backend/controllers/base_controller.go @@ -0,0 +1,30 @@ +package controllers + +import ( + "encoding/json" + "github.com/beego/beego/v2/server/web" + "net/http" +) + +type BaseController struct { + web.Controller +} + +func (c *BaseController) ServeJSON() { + c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8") + + var err error + + data := c.Data["json"] + + encoder := json.NewEncoder(c.Ctx.Output.Context.ResponseWriter) + encoder.SetEscapeHTML(false) + + encoder.SetIndent("", " ") + err = encoder.Encode(data) + + if err != nil { + http.Error(c.Ctx.Output.Context.ResponseWriter, err.Error(), http.StatusInternalServerError) + return + } +} diff --git a/beego-backend/controllers/login_controller.go b/beego-backend/controllers/login_controller.go new file mode 100644 index 0000000..ae8f9c6 --- /dev/null +++ b/beego-backend/controllers/login_controller.go @@ -0,0 +1,32 @@ +package controllers + +import ( + "beego-backend/common" + "beego-backend/models/users" + "encoding/json" + "fmt" +) + +type LoginController struct { + BaseController +} + +// @router /login_by_pwd [post] +func (c *LoginController) LoginByPwd() { + var Data users.LoginModel + err := json.Unmarshal(c.Ctx.Input.RequestBody, &Data) + if err != nil { + Result := common.ResponseResult{ + Code: -1, + Success: false, + Message: fmt.Sprintf("系统异常:%v", err.Error()), + Data: nil, + } + c.Data["json"] = &Result + c.ServeJSON() + return + } + result := users.LoginByPassword(Data) + c.Data["json"] = &result + c.ServeJSON() +} diff --git a/beego-backend/go.mod b/beego-backend/go.mod new file mode 100644 index 0000000..9578fa3 --- /dev/null +++ b/beego-backend/go.mod @@ -0,0 +1,28 @@ +module beego-backend + +go 1.24 + +require ( + github.com/beego/beego/v2 v2.3.8 + github.com/mattn/go-sqlite3 v1.14.28 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/beego-backend/go.sum b/beego-backend/go.sum new file mode 100644 index 0000000..7ddb0c5 --- /dev/null +++ b/beego-backend/go.sum @@ -0,0 +1,59 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/beego/beego/v2 v2.3.8 h1:wplhB1pF4TxR+2SS4PUej8eDoH4xGfxuHfS7wAk9VBc= +github.com/beego/beego/v2 v2.3.8/go.mod h1:8vl9+RrXqvodrl9C8yivX1e6le6deCK6RWeq8R7gTTg= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw= +github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= +github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/beego-backend/main.go b/beego-backend/main.go new file mode 100644 index 0000000..3629b99 --- /dev/null +++ b/beego-backend/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "log" + + "beego-backend/common" + "beego-backend/middleware" + _ "beego-backend/routers" + + "github.com/beego/beego/v2/server/web" +) + +func main() { + // 初始化数据库封装 + err := common.InitDatabase() + if err != nil { + log.Fatalf("❌ 数据库初始化失败: %v", err) + } + + // 中间件 + web.InsertFilter("/*", web.BeforeRouter, middleware.BaseAuth) + + // 启动服务器 + web.Run() +} diff --git a/beego-backend/middleware/base_auth.go b/beego-backend/middleware/base_auth.go new file mode 100644 index 0000000..21c4c35 --- /dev/null +++ b/beego-backend/middleware/base_auth.go @@ -0,0 +1,20 @@ +package middleware + +import ( + "github.com/beego/beego/v2/server/web/context" +) + +var BaseAuth = func(ctx *context.Context) { + //secret := ctx.Input.Query("secret") + //if secret == "" { + // resp := common.ResponseResult{ + // Code: -1, + // Success: false, + // Message: "数据库链接失败", + // Data: nil, + // } + // ctx.Output.JSON(resp, false, false) + // ctx.Abort(403, "") + //} + +} diff --git a/beego-backend/models/users/login.go b/beego-backend/models/users/login.go new file mode 100644 index 0000000..3b317d0 --- /dev/null +++ b/beego-backend/models/users/login.go @@ -0,0 +1,15 @@ +package users + +import ( + "beego-backend/common" +) + +func LoginByPassword(data LoginModel) common.ResponseResult { + + return common.ResponseResult{ + Code: 0, + Success: true, + Message: "success", + Data: nil, + } +} diff --git a/beego-backend/models/users/util.go b/beego-backend/models/users/util.go new file mode 100644 index 0000000..1487276 --- /dev/null +++ b/beego-backend/models/users/util.go @@ -0,0 +1,14 @@ +package users + +type UserModel struct { + ID int `json:"id"` + Username string `json:"username"` + Password string `json:"password"` + Email string `json:"email"` + IsActive bool `json:"is_active"` +} + +type LoginModel struct { + Username string `json:"username"` + Password string `json:"password"` +} diff --git a/beego-backend/routers/commentsRouter.go b/beego-backend/routers/commentsRouter.go new file mode 100644 index 0000000..945cf7f --- /dev/null +++ b/beego-backend/routers/commentsRouter.go @@ -0,0 +1,19 @@ +package routers + +import ( + beego "github.com/beego/beego/v2/server/web" + "github.com/beego/beego/v2/server/web/context/param" +) + +func init() { + + beego.GlobalControllerRouter["beego-backend/controllers:LoginController"] = append(beego.GlobalControllerRouter["beego-backend/controllers:LoginController"], + beego.ControllerComments{ + Method: "LoginByPwd", + Router: `/login_by_pwd`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + +} diff --git a/beego-backend/routers/router.go b/beego-backend/routers/router.go new file mode 100644 index 0000000..101782e --- /dev/null +++ b/beego-backend/routers/router.go @@ -0,0 +1,29 @@ +package routers + +import ( + "beego-backend/controllers" + "github.com/beego/beego/v2/server/web" + "github.com/beego/beego/v2/server/web/context" +) + +func init() { + web.InsertFilter("*", web.BeforeRouter, func(ctx *context.Context) { + ctx.Output.Header("Access-Control-Allow-Origin", "*") + ctx.Output.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") + ctx.Output.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, token") + if ctx.Input.Method() == "OPTIONS" { + ctx.Output.SetStatus(200) + ctx.ResponseWriter.WriteHeader(200) + return + } + }) + + ns := web.NewNamespace("/api/v1/", + web.NSNamespace("/login", + web.NSInclude( + &controllers.LoginController{}, + ), + ), + ) + web.AddNamespace(ns) +}