github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/apis/version2/FavoriteHandler.go (about)

     1  package version2
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/insionng/makross"
     6  	"github.com/insionng/makross/jwt"
     7  	"github.com/insionng/yougam/helper"
     8  	"github.com/insionng/yougam/models"
     9  )
    10  
    11  func GetFavoriteTopicHandler(self *makross.Context) error {
    12  	herr.Message = "ErrServiceUnavailable"
    13  	herr.Status = makross.StatusServiceUnavailable
    14  
    15  	claims := jwt.GetMapClaims(self)
    16  	var uid int64
    17  	if jwtUserId, okay := claims["UserId"].(float64); okay {
    18  		uid = int64(jwtUserId)
    19  		if uid <= 0 {
    20  			herr.Message = "尚未登录"
    21  		}
    22  	}
    23  
    24  	tid := self.Param("id").MustInt64()
    25  	if tid <= 0 {
    26  		tid = self.Args("id").MustInt64()
    27  	}
    28  
    29  	var data = map[string]interface{}{}
    30  	if tid > 0 {
    31  		if models.IsTopicMark(uid, tid) {
    32  			data["IsTopicMark"] = true
    33  			return self.JSON(data)
    34  
    35  		} else {
    36  			data["IsTopicMark"] = false
    37  			return self.JSON(data)
    38  		}
    39  	}
    40  	herr.Message = "没有获取到查询参数"
    41  	return self.JSON(herr, makross.StatusServiceUnavailable)
    42  }
    43  
    44  func PostFavoriteTopicHandler(self *makross.Context) error {
    45  
    46  	herr.Message = "ErrServiceUnavailable"
    47  	herr.Status = makross.StatusServiceUnavailable
    48  
    49  	claims := jwt.GetMapClaims(self)
    50  	var uid int64
    51  	if jwtUserId, okay := claims["UserId"].(float64); okay {
    52  		uid = int64(jwtUserId)
    53  		if uid <= 0 {
    54  			herr.Message = "尚未登录"
    55  		}
    56  	}
    57  
    58  	tid := self.Param("id").MustInt64()
    59  	if tid <= 0 {
    60  		tid = self.Args("id").MustInt64()
    61  	}
    62  	cid := self.Args("cid").MustInt64()
    63  
    64  	if (tid > 0) && (cid > 0) {
    65  		if models.IsTopicMark(uid, tid) {
    66  			herr.Message = "话题已收藏过"
    67  			herr.Status = makross.StatusInternalServerError
    68  			return self.JSON(herr, makross.StatusInternalServerError)
    69  
    70  		} else {
    71  			if objs, err := models.GetTopic(tid); err != nil {
    72  				herr.Message = "此话题不存在,无法收藏!"
    73  				herr.Status = makross.StatusNotFound
    74  				return self.JSON(herr, makross.StatusNotFound)
    75  			} else {
    76  				objs.Hotup = objs.Hotup + 1
    77  				objs.Hotscore = helper.Score(objs.Hotup, objs.Hotdown)
    78  				objs.Hotvote = helper.QhotVote(objs.Hotup, objs.Hotdown)
    79  				objs.Hotness = helper.Hotness(objs.Hotup, objs.Hotdown, objs.Created)
    80  				objs.Confidence = helper.Confidence(objs.Hotup, objs.Hotdown)
    81  
    82  				models.PutTopic(tid, objs)
    83  				row, err := models.SetTopicMark(uid, cid, tid)
    84  				if (row <= 0) || (err != nil) {
    85  					herr.Message = "收藏话题时数据库发生错误!"
    86  					herr.Status = makross.StatusInternalServerError
    87  					return self.JSON(herr, makross.StatusInternalServerError)
    88  				}
    89  				herr.Message = "成功收藏话题!"
    90  				herr.Status = makross.StatusOK
    91  				return self.JSON(herr)
    92  			}
    93  		}
    94  	}
    95  	herr.Message = "没有获取到话题ID"
    96  	return self.JSON(herr, makross.StatusServiceUnavailable)
    97  }
    98  
    99  func DelFavoriteTopicHandler(self *makross.Context) error {
   100  
   101  	herr.Message = "ErrServiceUnavailable"
   102  	herr.Status = makross.StatusServiceUnavailable
   103  
   104  	claims := jwt.GetMapClaims(self)
   105  	var uid int64
   106  	if jwtUserId, okay := claims["UserId"].(float64); okay {
   107  		uid = int64(jwtUserId)
   108  		if uid <= 0 {
   109  			herr.Message = "尚未登录"
   110  		}
   111  	}
   112  
   113  	tid := self.Param("id").MustInt64()
   114  	if tid <= 0 {
   115  		tid = self.Args("id").MustInt64()
   116  	}
   117  
   118  	if tid > 0 {
   119  		herr.Message = "取消收藏话题成功"
   120  		herr.Status = makross.StatusOK
   121  		row, err := models.DelTopicMark(uid, tid)
   122  		if (row <= 0) || (err != nil) {
   123  			herr.Message = "取消收藏话题失败"
   124  			herr.Status = makross.StatusInternalServerError
   125  			return self.JSON(herr, makross.StatusInternalServerError)
   126  		}
   127  		return self.JSON(herr)
   128  	}
   129  	herr.Message = "没有获取到话题ID"
   130  	return self.JSON(herr, makross.StatusServiceUnavailable)
   131  }
   132  
   133  func GetFavoriteTopicsHandler(self *makross.Context) error {
   134  
   135  	herr.Message = "ErrServiceUnavailable"
   136  	herr.Status = makross.StatusServiceUnavailable
   137  
   138  	offset := self.Args("offset").MustInt()
   139  	limit := self.Args("limit").MustInt()
   140  	field := self.Args("field").String()
   141  	cid := self.Args("cid").MustInt64()
   142  
   143  	claims := jwt.GetMapClaims(self)
   144  	var uid int64
   145  	if jwtUserId, okay := claims["UserId"].(float64); okay {
   146  		uid = int64(jwtUserId)
   147  		if uid <= 0 {
   148  			herr.Message = "尚未登录"
   149  		}
   150  	}
   151  
   152  	var questions []*models.Topic
   153  	var questionMark = new([]*models.TopicMark)
   154  	var err error
   155  	if cid > 0 {
   156  		if questionMark, err = models.GetTopicMarksViaUidWithCid(offset, limit, uid, cid, field); err != nil {
   157  			herr.Message = fmt.Sprintf("获取收藏数据发生错误:%v", err)
   158  			return self.JSON(herr, makross.StatusServiceUnavailable)
   159  		}
   160  	} else {
   161  		if questionMark, err = models.GetTopicMarksViaUid(offset, limit, uid, field); err != nil {
   162  			herr.Message = fmt.Sprintf("获取收藏数据发生错误:%v", err)
   163  			return self.JSON(herr, makross.StatusServiceUnavailable)
   164  		}
   165  	}
   166  
   167  	for _, v := range *questionMark {
   168  		q, _ := models.GetTopic(v.Tid)
   169  		questions = append(questions, q)
   170  	}
   171  
   172  	if questions != nil {
   173  		return self.JSON(questions)
   174  	}
   175  
   176  	herr.Message = "没有从数据库中获取到收藏数据"
   177  	return self.JSON(herr, makross.StatusServiceUnavailable)
   178  
   179  }