From b0cce2f78149c4aa432fedfc20e18255b44fe22a Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Sat, 27 Jul 2019 00:56:37 +0800 Subject: [PATCH] added user management --- backend/model/user.go | 47 +++++++++++++++++++++++++++++++++++++++++- backend/routes/user.go | 45 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/backend/model/user.go b/backend/model/user.go index 7394a199..d9e2248c 100644 --- a/backend/model/user.go +++ b/backend/model/user.go @@ -20,6 +20,19 @@ type User struct { UpdateTs time.Time `json:"update_ts" bson:"update_ts"` } +func (user *User) Save() error { + s, c := database.GetCol("users") + defer s.Close() + + user.UpdateTs = time.Now() + + if err := c.UpdateId(user.Id, user); err != nil { + debug.PrintStack() + return err + } + return nil +} + func (user *User) Add() error { s, c := database.GetCol("users") defer s.Close() @@ -81,7 +94,7 @@ func GetUserByUsername(username string) (User, error) { } func GetUserList(filter interface{}, skip int, limit int, sortKey string) ([]User, error) { - s, c := database.GetCol("tasks") + s, c := database.GetCol("users") defer s.Close() var users []User @@ -103,3 +116,35 @@ func GetUserListTotal(filter interface{}) (int, error) { } return result, nil } + +func UpdateUser(id bson.ObjectId, item User) error { + s, c := database.GetCol("users") + defer s.Close() + + var result User + if err := c.FindId(id).One(&result); err != nil { + debug.PrintStack() + return err + } + + if err := item.Save(); err != nil { + return err + } + return nil +} + +func RemoveUser(id bson.ObjectId) error { + s, c := database.GetCol("users") + defer s.Close() + + var result User + if err := c.FindId(id).One(&result); err != nil { + return err + } + + if err := c.RemoveId(id); err != nil { + return err + } + + return nil +} diff --git a/backend/routes/user.go b/backend/routes/user.go index 72674cff..39d227ba 100644 --- a/backend/routes/user.go +++ b/backend/routes/user.go @@ -60,12 +60,17 @@ func GetUserList(c *gin.Context) { } // 获取总用户数 - total, err := model.GetTaskListTotal(nil) + total, err := model.GetUserListTotal(nil) if err != nil { HandleError(http.StatusInternalServerError, c, err) return } + // 去除密码 + for i := range users { + users[i].Password = "" + } + c.JSON(http.StatusOK, ListResponse{ Status: "ok", Message: "success", @@ -100,9 +105,47 @@ func PutUser(c *gin.Context) { } func PostUser(c *gin.Context) { + id := c.Param("id") + + if !bson.IsObjectIdHex(id) { + HandleErrorF(http.StatusBadRequest, c, "invalid id") + } + + var item model.User + if err := c.ShouldBindJSON(&item); err != nil { + HandleError(http.StatusBadRequest, c, err) + return + } + + if err := model.UpdateUser(bson.ObjectIdHex(id), item); err != nil { + HandleError(http.StatusInternalServerError, c, err) + return + } + + c.JSON(http.StatusOK, Response{ + Status: "ok", + Message: "success", + }) } func DeleteUser(c *gin.Context) { + id := c.Param("id") + + if !bson.IsObjectIdHex(id) { + HandleErrorF(http.StatusBadRequest, c, "invalid id") + return + } + + // 从数据库中删除该爬虫 + if err := model.RemoveUser(bson.ObjectIdHex(id)); err != nil { + HandleError(http.StatusInternalServerError, c, err) + return + } + + c.JSON(http.StatusOK, Response{ + Status: "ok", + Message: "success", + }) } func Login(c *gin.Context) {