github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/apis/version2/UserHandler.go (about) 1 package version2 2 3 import ( 4 "github.com/insionng/yougam/helper" 5 "github.com/insionng/yougam/models" 6 "github.com/insionng/makross" 7 "github.com/insionng/makross/jwt" 8 ) 9 10 // GetUsers 11 func GetUsersHandler(self *makross.Context) error { 12 13 herr.Message = "ErrServiceUnavailable" 14 herr.Status = makross.StatusServiceUnavailable 15 16 offset := self.Args("offset").MustInt() 17 page := self.Args("page").MustInt64() 18 limit := self.Args("limit").MustInt() 19 field := self.Args("field").String() 20 role := self.Args("role").MustInt64() 21 22 if field == "lastest" { 23 field = "id" 24 } else if (field == "hotness") || (len(field) == 0) { 25 field = "hotness" 26 } 27 28 switch { 29 case role != 0: // 获取特定角色用户列表 30 if offset <= 0 { 31 var results_count int64 32 if qt, err := models.GetUsersByRole(role, 0, limit, field); err != nil { 33 herr.Message = err.Error() 34 return self.JSON(herr, makross.StatusServiceUnavailable) 35 } else { 36 results_count = int64(len(*qt)) 37 _, _, _, _, offset_ := helper.Pages(results_count, page, int64(limit)) 38 if objs, err := models.GetUsersByRole(role, int(offset_), limit, field); err == nil { 39 return self.JSON(objs) 40 } else { 41 herr.Message = err.Error() 42 return self.JSON(herr, makross.StatusServiceUnavailable) 43 } 44 45 } 46 } else { 47 if objs, err := models.GetUsersByRole(role, offset, limit, field); err == nil { 48 return self.JSON(objs) 49 } else { 50 herr.Message = err.Error() 51 return self.JSON(herr, makross.StatusServiceUnavailable) 52 } 53 } 54 default: // 获取全部用户列表 55 if offset <= 0 { 56 if results_count, err := models.GetUsersCount(offset, limit); err != nil { 57 herr.Message = err.Error() 58 return self.JSON(herr, makross.StatusServiceUnavailable) 59 } else { 60 _, _, _, _, offset_ := helper.Pages(results_count, page, int64(limit)) 61 if objs, err := models.GetUsers(int(offset_), limit, field); err == nil { 62 return self.JSON(objs) 63 } else { 64 herr.Message = err.Error() 65 return self.JSON(herr, makross.StatusServiceUnavailable) 66 } 67 68 } 69 } else { 70 if objs, err := models.GetUsers(offset, int(limit), field); err == nil { 71 return self.JSON(objs) 72 } else { 73 herr.Message = err.Error() 74 return self.JSON(herr, makross.StatusServiceUnavailable) 75 } 76 } 77 } 78 } 79 80 func GetUserHandler(self *makross.Context) error { 81 herr.Message = "ErrServiceUnavailable" 82 herr.Status = makross.StatusServiceUnavailable 83 tid := self.Args("id").MustInt64() 84 85 if tid != 0 { 86 tp, err := models.GetUser(tid) 87 if err != nil { 88 herr.Message = err.Error() 89 return self.JSON(herr, makross.StatusServiceUnavailable) 90 } 91 return self.JSON(tp) 92 } 93 herr.Message = "没有获取到用户ID" 94 return self.JSON(herr, makross.StatusServiceUnavailable) 95 } 96 97 func PostUserHandler(self *makross.Context) error { 98 herr.Message = "ErrServiceUnavailable" 99 herr.Status = makross.StatusServiceUnavailable 100 101 claims := jwt.GetMapClaims(self) 102 var uid int64 103 if jwtUserId, okay := claims["UserId"].(float64); okay { 104 uid = int64(jwtUserId) 105 if uid <= 0 { 106 herr.Message = "尚未登录" 107 } 108 } 109 var isRoot bool 110 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 111 isRoot = jwtIsRoot 112 } else { 113 herr.Message = "尚无权限" 114 } 115 116 var user models.User 117 self.Bind(&user) 118 119 if isRoot && (len(user.Username) > 0) && (len(user.Password) > 0) { 120 121 user.Password = helper.EncryptHash(user.Password, nil) 122 if !helper.CheckEmail(user.Email) { 123 user.Email = "" 124 } 125 126 tp, err := models.PostUser(&user) 127 if err != nil { 128 herr.Message = err.Error() 129 return self.JSON(err, makross.StatusServiceUnavailable) 130 } 131 return self.JSON(tp) 132 } 133 herr.Message = "没有获取到用户数据" 134 return self.JSON(herr, makross.StatusServiceUnavailable) 135 } 136 137 // PutUser 更新用户 138 func PutUserHandler(self *makross.Context) error { 139 herr.Message = "ErrServiceUnavailable" 140 herr.Status = makross.StatusServiceUnavailable 141 142 claims := jwt.GetMapClaims(self) 143 var uid int64 144 if jwtUserId, okay := claims["UserId"].(float64); okay { 145 uid = int64(jwtUserId) 146 if uid <= 0 { 147 herr.Message = "尚未登录" 148 } 149 } 150 var isRoot bool 151 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 152 isRoot = jwtIsRoot 153 } else { 154 herr.Message = "尚无权限" 155 } 156 157 var user models.User 158 self.Bind(&user) 159 160 id := self.Args("id").MustInt64() 161 if id <= 0 { 162 id = user.Id 163 } 164 165 var allow bool 166 usr, err := models.GetUser(id) 167 if isRoot { 168 allow = true 169 } else { 170 if err != nil { 171 herr.Message = "获取用户数据出错!" 172 return self.JSON(herr, makross.StatusServiceUnavailable) 173 } 174 if (uid > 0) && (usr.Id == uid) { 175 allow = true 176 } else { 177 herr.Message = "不是当前用户无权修改数据!" 178 return self.JSON(herr, makross.StatusUnauthorized) 179 } 180 } 181 182 if allow && (id > 0) { 183 184 user.Id = id 185 user.Password = helper.EncryptHash(user.Password, nil) 186 if !helper.CheckEmail(user.Email) { 187 user.Email = "" 188 } 189 190 row, err := models.PutUser(id, &user) 191 if (err != nil) || (row == 0) { 192 herr.Message = err.Error() 193 return self.JSON(herr, makross.StatusServiceUnavailable) 194 } else { 195 if u, e := models.GetUser(id); e != nil { 196 herr.Message = "获取用户数据出错!" 197 return self.JSON(herr, makross.StatusServiceUnavailable) 198 } else { 199 return self.JSON(u) 200 } 201 } 202 203 } 204 205 herr.Message = "没有获取到用户数据" 206 return self.JSON(herr, makross.StatusServiceUnavailable) 207 } 208 209 func DelUserHandler(self *makross.Context) error { 210 herr.Message = "ErrServiceUnavailable" 211 herr.Status = makross.StatusServiceUnavailable 212 213 claims := jwt.GetMapClaims(self) 214 var uid int64 215 if jwtUserId, okay := claims["UserId"].(float64); okay { 216 uid = int64(jwtUserId) 217 if uid <= 0 { 218 herr.Message = "尚未登录" 219 } 220 } 221 var isRoot bool 222 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 223 isRoot = jwtIsRoot 224 } else { 225 herr.Message = "尚无权限" 226 } 227 228 id := self.Args("id").MustInt64() 229 230 if isRoot && (id > 0) { 231 err := models.DelUser(id, uid, -1000) 232 if err != nil { 233 herr.Message = err.Error() 234 return self.JSON(herr, makross.StatusServiceUnavailable) 235 } 236 herr.Message = "删除用户成功" 237 return self.JSON(herr) 238 } 239 herr.Message = "没有获取到用户数据" 240 return self.JSON(herr, makross.StatusServiceUnavailable) 241 }