package scripts import ( "mygo/conf" "mygo/model" "mygo/response" "mygo/say" "mygo/dbhelper" "mygo/libs" "mygo/validator" "github.com/labstack/echo/v4" "gorm.io/gorm" ) func CreateUser(c echo.Context) error { data := response.CreateAdminResponse{} body := &validator.CreateAdminBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserName == "" || body.PassWord == "" { return say.Success(c, 10001, data) } username := body.UserName db := dbhelper.GetMySqlDB() user, err := model.GetUserByUserName(db, username) if err != nil || user.ID != "" { return say.Success(c, 10013, data) } password := body.PassWord salt := libs.GenString(8) pwd, err := libs.EncryptWithFixedSalt(password, conf.ObtenationIterations, username, salt) if err != nil { return say.Success(c, 10000, data) } u := model.User{ ID: libs.GenId(), UserName: username, PassWord: pwd, Salt: salt, RealName: body.RealName, } db.Create(&u) data.Id = u.ID return say.Success(c, 0, data) } func UpdatePwd(c echo.Context) error { id := c.QueryParam("id") oldpassword := c.QueryParam("oldpassword") password := c.QueryParam("password") data := response.NoneResponse{} if id == "" || oldpassword == "" || password == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() user, err := model.GetUserById(db, id) if err != nil || user.ID == "" { return say.Success(c, 10004, data) } mysalt := user.Salt mypwd := user.PassWord uname, err := libs.DecryptWithFixedSalt(oldpassword, conf.ObtenationIterations, mypwd, mysalt) if err != nil { return say.Success(c, 10025, data) } if uname != user.UserName { return say.Success(c, 10026, data) } salt := libs.GenString(8) pwd, err := libs.EncryptWithFixedSalt(password, conf.ObtenationIterations, user.UserName, salt) if err != nil { return say.Success(c, 10023, data) } rows := db.Model(&user).Updates(map[string]interface{}{"password": pwd, "salt": salt}).RowsAffected if rows <= 0 { return say.Success(c, 10023, data) } return say.Success(c, 0, data) } func UpdateUser(c echo.Context) error { data := response.NoneResponse{} body := &validator.UpdateAdminBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserID == "" { return say.Success(c, 10001, data) } userid := body.UserID db := dbhelper.GetMySqlDB() user, err := model.GetUserById(db, userid) if err != nil || user.ID == "" { return say.Success(c, 10004, data) } rows := db.Model(&user).Updates(map[string]interface{}{"root": body.Root, "realname": body.RealName, "avatar": body.Avatar}).RowsAffected if rows <= 0 { return say.Success(c, 10014, data) } return say.Success(c, 0, data) } func DelUser(c echo.Context) error { id := c.QueryParam("id") user_id := c.QueryParam("user_id") data := response.NoneResponse{} if id == "" || user_id == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() user, err := model.GetUserById(db, user_id) if err != nil || user.ID == "" { return say.Success(c, 10004, data) } txerr := db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') u := model.User{} if err := tx.Where("id = ?", user_id).Delete(&u).Error; err != nil { // 返回任何错误都会回滚事务 return err } r := model.UserRole{} if err := tx.Where("user_id = ?", user_id).Delete(&r).Error; err != nil { return err } // 返回 nil 提交事务 return nil }) if txerr != nil { return say.Success(c, 10000, data) } return say.Success(c, 0, data) } func GetUserList(c echo.Context) error { id := c.QueryParam("id") data := response.AdminListResponse{} if id == "" { return say.Success(c, 10001, data) } body := &validator.UserListBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10001, data) } page := body.Page if page <= 0 { page = 1 } limit := body.Limit if limit <= 0 { limit = 10 } db := dbhelper.GetMySqlDB() user := model.User{} var count int64 = 0 db.Find(&user).Count(&count) //总数 data.Count = count offset := (page - 1) * limit users, err := model.GetUserList(db, body.UserName, body.RealName, offset, limit) if err != nil { return say.Success(c, 10000, data) } data.Users = users return say.Success(c, 0, data) } func CheckUserName(c echo.Context) error { data := response.NoneResponse{} body := &validator.CheckUserNameBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserName == "" { return say.Success(c, 10001, data) } username := body.UserName db := dbhelper.GetMySqlDB() user, err := model.GetUserByUserName(db, username) if err != nil || user.ID != "" { return say.Success(c, 10013, data) } return say.Success(c, 0, data) }