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  }