github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/apis/version2/TopicHandler.go (about) 1 package version2 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/insionng/makross" 8 "github.com/insionng/makross/jwt" 9 "github.com/insionng/yougam/helper" 10 "github.com/insionng/yougam/models" 11 ) 12 13 // GetTopics 获取话题列表 14 func GetTopicsHandler(self *makross.Context) error { 15 16 herr.Message = "ErrServiceUnavailable" 17 herr.Status = makross.StatusServiceUnavailable 18 19 offset := self.Args("offset").MustInt() 20 page := self.Args("page").MustInt64() 21 pid := self.Args("pid").MustInt64() 22 limit := self.Args("limit").MustInt() 23 field := self.Args("field").String() 24 ctype := self.Args("ctype").MustInt64() 25 26 if field == "lastest" { 27 field = "id" 28 } else if (field == "hotness") || (len(field) == 0) { 29 field = "hotness" 30 } 31 32 if pid != 0 { 33 if offset <= 0 { 34 var resultsCount int64 35 if objs := models.GetTopicsViaPid(pid, 0, limit, 0, field); objs != nil { 36 resultsCount = int64(len(*objs)) 37 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 38 if objs := models.GetTopicsViaPid(pid, int(offset_), limit, ctype, field); objs != nil { 39 return self.JSON(objs) 40 } else { 41 herr.Message = "获取话题数据出错" 42 return self.JSON(herr, makross.StatusServiceUnavailable) 43 } 44 } else { 45 herr.Message = "没有获取到话题数据" 46 herr.Status = makross.StatusOK 47 return self.JSON(herr) 48 } 49 } else { 50 if objs := models.GetTopicsViaPid(pid, offset, int(limit), ctype, field); objs != nil { 51 return self.JSON(objs) 52 } else { 53 herr.Message = "获取话题数据出错" 54 return self.JSON(herr, makross.StatusServiceUnavailable) 55 } 56 } 57 } else { 58 if offset <= 0 { 59 if resultsCount, err := models.GetTopicsCount(offset, limit); err != nil { 60 herr.Message = err.Error() 61 return self.JSON(herr, makross.StatusServiceUnavailable) 62 } else { 63 _, _, _, _, offset_ := helper.Pages(resultsCount, page, int64(limit)) 64 if objs, err := models.GetTopics(int(offset_), limit, field); err == nil { 65 return self.JSON(objs) 66 } else { 67 herr.Message = err.Error() 68 return self.JSON(herr, makross.StatusServiceUnavailable) 69 } 70 71 } 72 } else { 73 if objs, err := models.GetTopics(offset, int(limit), field); err == nil { 74 return self.JSON(objs) 75 } else { 76 herr.Message = err.Error() 77 return self.JSON(herr, makross.StatusServiceUnavailable) 78 } 79 } 80 } 81 82 } 83 84 func GetTopicsByUserHandler(self *makross.Context) error { 85 86 userid := self.Args("id").MustInt64() 87 offset := self.Args("offset").MustInt64() 88 page := self.Args("page").MustInt64() 89 limit := self.Args("limit").MustInt64() 90 ctype := self.Args("ctype").MustInt64() 91 field := self.Args("field").String() 92 93 if field == "lastest" { 94 field = "id" 95 } else if (field == "hotness") || (len(field) == 0) { 96 field = "hotness" 97 } 98 99 if limit < 0 { 100 limit = 0 101 } 102 103 if page <= 0 { 104 page = 1 105 } 106 107 if userid > 0 { 108 if usrinfo, err := models.GetUser(userid); err == nil && usrinfo != nil { 109 if offset <= 0 { 110 _, _, _, _, offset := helper.Pages(usrinfo.TopicCount, page, limit) 111 if objs := models.GetTopicsByUid(userid, int(offset), int(limit), ctype, field); objs != nil { 112 return self.JSON(objs) 113 } 114 } else { 115 if objs := models.GetTopicsByUid(userid, int(offset), int(limit), ctype, field); objs != nil { 116 return self.JSON(objs) 117 } 118 } 119 120 } else { 121 herr.Message = "获取用户数据出错!" 122 return self.JSON(herr, makross.StatusServiceUnavailable) 123 } 124 125 } 126 127 herr.Message = "没有用户ID!" 128 return self.JSON(herr, makross.StatusServiceUnavailable) 129 } 130 131 // GetTopic 获取特定话题 132 func GetTopicHandler(self *makross.Context) error { 133 herr.Message = "ErrServiceUnavailable" 134 herr.Status = makross.StatusServiceUnavailable 135 id := self.Args("id").MustInt64() 136 if id > 0 { 137 obj, err := models.GetTopic(id) 138 if err != nil { 139 herr.Message = err.Error() 140 return self.JSON(herr, makross.StatusServiceUnavailable) 141 } 142 return self.JSON(obj) 143 } 144 herr.Message = "没有获取到话题ID" 145 return self.JSON(herr, makross.StatusServiceUnavailable) 146 } 147 148 // GetContent 获取话题 149 func GetContentHandler(self *makross.Context) error { 150 151 herr.Message = "ErrServiceUnavailable" 152 herr.Status = makross.StatusServiceUnavailable 153 tid := self.Args("id").MustInt64() 154 field := self.Args("field").String() 155 if field == "lastest" { 156 field = "id" 157 } else if (field == "hotness") || (len(field) == 0) { 158 field = "hotness" 159 } 160 161 if tid > 0 { 162 if tp, err := models.GetTopic(tid); tp != nil && err == nil { 163 tp.Views = tp.Views + 1 164 //tp.Hotup = tp.Hotup + 1 165 if row, e := models.PutTopic(tid, tp); e != nil { 166 log.Printf("GetContent更新话题ID%v访问次数数据错误, row:%v, error:%v", tid, row, e) 167 } 168 169 if objs := models.GetTopicsByPid(tid, 0, 0, 0, field); objs != nil && (len(*objs) > 0) { 170 return self.JSON(objs) 171 } else { 172 herr.Message = fmt.Sprintf("读取主题ID为%v的数据发生错误!", tid) 173 return self.JSON(herr, makross.StatusServiceUnavailable) 174 } 175 176 } 177 178 } 179 180 herr.Message = "不存在此话题ID" 181 return self.JSON(herr, makross.StatusServiceUnavailable) 182 183 } 184 185 // PostContent 发布话题 或 更新话题 186 func PostContentHandler(self *makross.Context) error { 187 188 herr.Message = "ErrServiceUnavailable" 189 herr.Status = makross.StatusServiceUnavailable 190 191 claims := jwt.GetMapClaims(self) 192 var uid int64 193 if jwtUserId, okay := claims["UserId"].(float64); okay { 194 uid = int64(jwtUserId) 195 if uid <= 0 { 196 herr.Message = "尚未登录" 197 return self.JSON(herr, makross.StatusServiceUnavailable) 198 } 199 } 200 var isRoot bool 201 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 202 isRoot = jwtIsRoot 203 } else { 204 herr.Message = "尚无权限" 205 return self.JSON(herr, makross.StatusServiceUnavailable) 206 } 207 208 var author string 209 if jwtUsername, okay := claims["Username"].(string); okay { 210 author = jwtUsername 211 } 212 213 var tp models.Topic 214 self.Bind(&tp) 215 216 id := self.Args("id").MustInt64() 217 if id > 0 { 218 tp.Id = id 219 } 220 221 if usrinfo, err := models.GetUser(uid); (err == nil) && (usrinfo != nil) && isRoot { 222 tp.Uid = uid 223 tp.Author = author 224 225 if tp.Id <= 0 { 226 //全新发布 227 if tid, err := models.PostTopic(&tp); err != nil || tid <= 0 { 228 herr.Message = fmt.Sprintf("发布内容写入数据库时发生错误:%v", err) 229 return self.JSON(herr, makross.StatusServiceUnavailable) 230 } else { 231 if tp, err := models.GetTopic(tid); err == nil { 232 return self.JSON(tp) 233 } else { 234 herr.Message = fmt.Sprintf("发布内容并获取话题内容数据出错:%v", err) 235 return self.JSON(herr, makross.StatusServiceUnavailable) 236 } 237 238 } 239 } else { 240 //对指定topicid的话题进行更新 241 if tid, err := models.PutTopic(tp.Id, &tp); (err != nil) || (tid <= 0) { 242 herr.Message = fmt.Sprintf("更新内容写入数据库时发生错误:%v", err) 243 return self.JSON(herr, makross.StatusServiceUnavailable) 244 } else { 245 if tp, err := models.GetTopic(tid); err != nil { 246 herr.Message = fmt.Sprintf("更新内容并获取话题内容数据出错:%v", err) 247 return self.JSON(herr, makross.StatusServiceUnavailable) 248 } else { 249 return self.JSON(tp) 250 } 251 252 } 253 } 254 255 } else { 256 herr.Message = "获取用户数据出错!" 257 return self.JSON(herr, makross.StatusServiceUnavailable) 258 259 } 260 } 261 262 // 更新话题 263 func PutContentHandler(self *makross.Context) error { 264 265 herr.Message = "ErrServiceUnavailable" 266 herr.Status = makross.StatusServiceUnavailable 267 268 claims := jwt.GetMapClaims(self) 269 var uid int64 270 if jwtUserId, okay := claims["UserId"].(float64); okay { 271 uid = int64(jwtUserId) 272 if uid <= 0 { 273 herr.Message = "尚未登录" 274 return self.JSON(herr, makross.StatusServiceUnavailable) 275 } 276 } 277 var isRoot bool 278 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 279 isRoot = jwtIsRoot 280 } else { 281 herr.Message = "尚无权限" 282 return self.JSON(herr, makross.StatusServiceUnavailable) 283 } 284 285 var author string 286 if jwtUsername, okay := claims["Username"].(string); okay { 287 author = jwtUsername 288 } 289 290 var tp models.Topic 291 self.Bind(&tp) 292 293 id := self.Args("id").MustInt64() 294 if id > 0 { 295 tp.Id = id 296 } 297 298 if usrinfo, err := models.GetUser(uid); (err == nil) && (usrinfo != nil) && isRoot { 299 tp.Uid = uid 300 tp.Author = author 301 302 if tp.Id > 0 { 303 //对指定topicid的话题进行更新 304 if tid, err := models.PutTopic(tp.Id, &tp); (err != nil) || (tid <= 0) { 305 herr.Message = fmt.Sprintf("更新内容写入数据库时发生错误:%v", err) 306 return self.JSON(herr, makross.StatusServiceUnavailable) 307 } else { 308 if tp, err := models.GetTopic(tid); err != nil { 309 herr.Message = fmt.Sprintf("更新内容并获取话题内容数据出错:%v", err) 310 return self.JSON(herr, makross.StatusServiceUnavailable) 311 } else { 312 return self.JSON(tp) 313 } 314 315 } 316 } 317 } 318 herr.Message = "获取用户数据出错!" 319 return self.JSON(herr, makross.StatusServiceUnavailable) 320 321 } 322 323 func DelContentHandler(self *makross.Context) error { 324 herr.Message = "ErrServiceUnavailable" 325 herr.Status = makross.StatusServiceUnavailable 326 327 claims := jwt.GetMapClaims(self) 328 var uid int64 329 if jwtUserId, okay := claims["UserId"].(float64); okay { 330 uid = int64(jwtUserId) 331 if uid <= 0 { 332 herr.Message = "尚未登录" 333 return self.JSON(herr, makross.StatusServiceUnavailable) 334 } 335 } 336 var isRoot bool 337 if jwtIsRoot, okay := claims["IsRoot"].(bool); okay { 338 isRoot = jwtIsRoot 339 } else { 340 herr.Message = "尚无权限" 341 } 342 343 id := self.Args("id").MustInt64() 344 345 if isRoot && (id > 0) { 346 err := models.DelTopicsByPid(id, uid, -1000) 347 if err != nil { 348 return self.JSON(err, makross.StatusServiceUnavailable) 349 } 350 herr.Message = "删除话题成功" 351 herr.Status = makross.StatusOK 352 return self.JSON(herr) 353 } 354 herr.Message = "没有获取到话题ID" 355 return self.JSON(herr, makross.StatusServiceUnavailable) 356 }