github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/apis/version2/CategoryHandler.go (about) 1 package version2 2 3 import ( 4 "github.com/insionng/yougam/helper" 5 "github.com/insionng/yougam/models" 6 "fmt" 7 "github.com/insionng/makross" 8 "github.com/insionng/makross/jwt" 9 ) 10 11 func GetCategoryHandler(self *makross.Context) error { 12 herr.Message = "ErrServiceUnavailable" 13 herr.Status = makross.StatusServiceUnavailable 14 nid := self.Args("id").MustInt64() 15 16 if nid > 0 { 17 obj, err := models.GetCategory(nid) 18 if err != nil { 19 herr.Message = err.Error() 20 return self.JSON(herr, makross.StatusServiceUnavailable) 21 } 22 return self.JSON(obj) 23 } 24 herr.Message = "没有获取到分类ID" 25 return self.JSON(herr, makross.StatusServiceUnavailable) 26 } 27 28 // GetCategoriesHandler 29 func GetCategoriesHandler(self *makross.Context) error { 30 31 herr.Message = "ErrServiceUnavailable" 32 herr.Status = makross.StatusServiceUnavailable 33 34 offset := self.Args("offset").MustInt() 35 page := self.Args("page").MustInt64() 36 limit := self.Args("limit").MustInt() 37 field := self.Args("field").String() 38 pid := self.Args("pid").MustInt64() 39 nid := self.Args("nid").MustInt64() 40 ctype := self.Args("ctype").MustInt64() 41 42 if field == "lastest" { 43 field = "id" 44 } else if (field == "hotness") || (len(field) == 0) { 45 field = "hotness" 46 } 47 48 switch { 49 case (ctype != 0) && (pid != 0): // 获取特定ctype分类里特定pid之分类列表 50 if offset <= 0 { 51 var resultsCount int64 52 if objs, err := models.GetCategoriesByCtypeWithPid(0, limit, ctype, pid, field); err != nil { 53 herr.Message = err.Error() 54 return self.JSON(herr, makross.StatusServiceUnavailable) 55 } else { 56 resultsCount = int64(len(*objs)) 57 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 58 if objs, err := models.GetCategoriesByCtypeWithPid(int(offset_), limit, ctype, pid, field); err == nil { 59 return self.JSON(objs) 60 } else { 61 herr.Message = err.Error() 62 return self.JSON(herr, makross.StatusServiceUnavailable) 63 } 64 65 } 66 } else { 67 if objs, err := models.GetCategoriesByCtypeWithPid(offset, limit, ctype, pid, field); err == nil { 68 return self.JSON(objs) 69 } else { 70 herr.Message = err.Error() 71 return self.JSON(herr, makross.StatusServiceUnavailable) 72 } 73 } 74 case (ctype == 0) && (pid != 0): // 获取特定分类之下级分类列表 75 if offset <= 0 { 76 var resultsCount int64 77 if objs := models.GetCategoriesViaPid(pid, 0, limit, 0, field); objs != nil { 78 resultsCount = int64(len(*objs)) 79 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 80 if objs := models.GetCategoriesViaPid(pid, int(offset_), limit, 0, field); objs != nil { 81 return self.JSON(objs) 82 } else { 83 herr.Message = "获取分类数据出错" 84 return self.JSON(herr, makross.StatusServiceUnavailable) 85 } 86 87 } else { 88 herr.Message = "没有获取到分类数据" 89 herr.Status = makross.StatusOK 90 return self.JSON(herr) 91 } 92 } else { 93 if objs := models.GetCategoriesViaPid(pid, offset, limit, 0, field); objs != nil { 94 return self.JSON(objs) 95 } else { 96 herr.Message = "没有获取到分类数据" 97 herr.Status = makross.StatusOK 98 return self.JSON(herr) 99 } 100 } 101 case (ctype != 0) && (nid > 0): // 获取特定ctype分类里特定nid之分类列表 102 if offset <= 0 { 103 var resultsCount int64 104 if objs, err := models.GetCategoriesByCtypeWithNid(0, limit, ctype, nid, field); err != nil { 105 herr.Message = err.Error() 106 return self.JSON(herr, makross.StatusServiceUnavailable) 107 } else { 108 resultsCount = int64(len(*objs)) 109 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 110 if objs, err := models.GetCategoriesByCtypeWithNid(int(offset_), limit, ctype, nid, field); err == nil { 111 return self.JSON(objs) 112 } else { 113 herr.Message = err.Error() 114 return self.JSON(herr, makross.StatusServiceUnavailable) 115 } 116 117 } 118 } else { 119 if objs, err := models.GetCategoriesByCtypeWithNid(offset, limit, ctype, nid, field); err == nil { 120 return self.JSON(objs) 121 } else { 122 herr.Message = err.Error() 123 return self.JSON(herr, makross.StatusServiceUnavailable) 124 } 125 } 126 case (ctype == 0) && (nid > 0): // 获取特定分类之下级分类列表 127 if offset <= 0 { 128 var resultsCount int64 129 if objs, err := models.GetCategoriesByNid(nid, 0, limit, field); err != nil { 130 herr.Message = fmt.Sprintf("获取分类数据发生错误:%v", err) 131 return self.JSON(herr, makross.StatusServiceUnavailable) 132 } else { 133 resultsCount = int64(len(*objs)) 134 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 135 if objs, err := models.GetCategoriesByNid(nid, int(offset_), limit, field); err != nil { 136 herr.Message = "获取分类数据出错" 137 return self.JSON(herr, makross.StatusServiceUnavailable) 138 } else { 139 return self.JSON(objs) 140 } 141 } 142 143 } else { 144 if objs, err := models.GetCategoriesByNid(nid, offset, limit, field); err != nil { 145 herr.Message = "获取分类数据出错" 146 return self.JSON(herr, makross.StatusServiceUnavailable) 147 } else { 148 return self.JSON(objs) 149 } 150 } 151 case (ctype != 0) && (pid == 0) && (nid <= 0): // 获取特定ctype分类列表 152 if offset <= 0 { 153 var resultsCount int64 154 if objs, err := models.GetCategoriesByCtype(0, limit, ctype, field); err != nil { 155 herr.Message = err.Error() 156 return self.JSON(herr, makross.StatusServiceUnavailable) 157 } else { 158 resultsCount = int64(len(*objs)) 159 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 160 if objs, err := models.GetCategoriesByCtype(int(offset_), limit, ctype, field); err == nil { 161 return self.JSON(objs) 162 } else { 163 herr.Message = err.Error() 164 return self.JSON(herr, makross.StatusServiceUnavailable) 165 } 166 167 } 168 } else { 169 if objs, err := models.GetCategoriesByCtype(offset, limit, ctype, field); err == nil { 170 return self.JSON(objs) 171 } else { 172 herr.Message = err.Error() 173 return self.JSON(herr, makross.StatusServiceUnavailable) 174 } 175 } 176 default: // 获取全部分类列表 177 if offset <= 0 { 178 if resultsCount, err := models.GetCategoriesCount(offset, limit); err != nil { 179 herr.Message = err.Error() 180 return self.JSON(herr, makross.StatusServiceUnavailable) 181 } else { 182 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 183 if objs, err := models.GetCategories(int(offset_), limit, field); err == nil { 184 return self.JSON(objs) 185 } else { 186 herr.Message = err.Error() 187 return self.JSON(herr, makross.StatusServiceUnavailable) 188 } 189 190 } 191 } else { 192 if objs, err := models.GetCategories(offset, int(limit), field); err == nil { 193 return self.JSON(objs) 194 } else { 195 herr.Message = err.Error() 196 return self.JSON(herr, makross.StatusServiceUnavailable) 197 } 198 } 199 } 200 } 201 202 func PostCategoryHandler(self *makross.Context) error { 203 herr.Message = "ErrServiceUnavailable" 204 herr.Status = makross.StatusServiceUnavailable 205 206 claims := jwt.GetMapClaims(self) 207 var uid int64 208 if jwtUserId, okay := claims["UserId"].(float64); okay { 209 uid = int64(jwtUserId) 210 if uid <= 0 { 211 herr.Message = "尚未登录" 212 } 213 } 214 215 var author string 216 if jwtUsername, okay := claims["Username"].(string); okay { 217 author = jwtUsername 218 } 219 220 var obj models.Category 221 self.Bind(&obj) 222 223 if (obj.Pid >= 0) && (len(obj.Title) > 0) && (uid > 0) { 224 obj.Uid = uid 225 obj.Author = author 226 row, err := models.PostCategory(&obj) 227 if (err != nil) || row <= 0 { 228 return self.JSON(err, makross.StatusServiceUnavailable) 229 } 230 return self.JSON(obj) 231 } 232 herr.Message = "新增分类失败" 233 return self.JSON(herr, makross.StatusServiceUnavailable) 234 } 235 236 func PutCategoryHandler(self *makross.Context) error { 237 herr.Message = "ErrServiceUnavailable" 238 herr.Status = makross.StatusServiceUnavailable 239 240 claims := jwt.GetMapClaims(self) 241 var uid int64 242 if jwtUserId, okay := claims["UserId"].(float64); okay { 243 uid = int64(jwtUserId) 244 if uid <= 0 { 245 herr.Message = "尚未登录" 246 } 247 } 248 var author string 249 if jwtUsername, okay := claims["Username"].(string); okay { 250 author = jwtUsername 251 } 252 253 var obj models.Category 254 self.Bind(&obj) 255 256 if obj.Id > 0 { 257 obj.Uid = uid 258 obj.Author = author 259 row, err := models.PutCategory(obj.Id, &obj) 260 if (err != nil) || (row <= 0) { 261 return self.JSON(err, makross.StatusServiceUnavailable) 262 } 263 return self.JSON(obj) 264 } 265 herr.Message = "修改分类失败" 266 return self.JSON(herr, makross.StatusServiceUnavailable) 267 } 268 269 func DelCategoryHandler(self *makross.Context) error { 270 herr.Message = "ErrServiceUnavailable" 271 herr.Status = makross.StatusServiceUnavailable 272 273 claims := jwt.GetMapClaims(self) 274 var uid int64 275 if jwtUserId, okay := claims["UserId"].(float64); okay { 276 uid = int64(jwtUserId) 277 if uid <= 0 { 278 herr.Message = "尚未登录" 279 } 280 } 281 var isRoot bool 282 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 283 isRoot = jwtIsRoot 284 } else { 285 herr.Message = "尚无权限" 286 } 287 288 id := self.Args("id").MustInt64() 289 290 if isRoot && (id > 0) { 291 err := models.DelCategory(id, uid, -1000) 292 if err != nil { 293 herr.Message = err.Error() 294 return self.JSON(herr, makross.StatusServiceUnavailable) 295 } 296 herr.Status = makross.StatusOK 297 herr.Message = "删除分类成功" 298 return self.JSON(herr) 299 } 300 herr.Message = "删除分类失败" 301 return self.JSON(herr, makross.StatusServiceUnavailable) 302 }