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  }