package routers import ( "crypto/md5" "fmt" "main/configs" "main/models" "main/utils" "net/http" "github.com/google/uuid" "github.com/gorilla/mux" ) // 獲取用戶列表 func UsersGet(w http.ResponseWriter, r *http.Request) { var listview models.ListView listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 10) var user_list []models.User db := configs.ORMDB() db.Offset((listview.Page - 1) * listview.PageSize).Limit(listview.PageSize).Find(&user_list) for _, user := range user_list { listview.List = append(listview.List, user) } db.Model(&models.User{}).Count(&listview.Total) listview.Next = listview.Page*listview.PageSize < int(listview.Total) listview.WriteJSON(w) } // 創建用戶 func UsersPost(w http.ResponseWriter, r *http.Request) { var form map[string]interface{} = utils.BodyRead(r) if form["name"] == nil || form["email"] == nil || form["password"] == nil { w.WriteHeader(http.StatusBadRequest) w.Write([]byte("400 - name, email, password cannot be empty")) return } // 創建用戶 var slat string = uuid.New().String() var user models.User = models.User{ Name: form["name"].(string), Email: form["email"].(string), Password: fmt.Sprintf("%x", md5.Sum([]byte(form["password"].(string)+slat))), Slat: slat, } // 寫入數據庫 if err := configs.ORMDB().Create(&user).Error; err != nil { w.WriteHeader(http.StatusBadRequest) w.Write([]byte("400 - " + err.Error())) return } // 返回信息 w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(user)) } // 獲取用戶 func UsersItemGet(w http.ResponseWriter, r *http.Request) { user := models.User{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} if err := configs.ORMDB().First(&user).Error; err != nil { w.WriteHeader(http.StatusNotFound) w.Write([]byte("404 - " + err.Error())) return } w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(user)) } // 更新用戶 func UsersItemPatch(w http.ResponseWriter, r *http.Request) { form := utils.BodyRead(r) user := models.User{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} configs.ORMDB().First(&user) if name, ok := form["name"].(string); ok { user.Name = name } if email, ok := form["email"].(string); ok { user.Email = email } if password, ok := form["password"].(string); ok { user.Slat = uuid.New().String() user.Password = fmt.Sprintf("%x", md5.Sum([]byte(password+user.Slat))) } if admin, ok := form["admin"].(bool); ok { user.Admin = admin } configs.ORMDB().Save(&user) w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(user)) } // 刪除用戶 func UsersItemDelete(w http.ResponseWriter, r *http.Request) { user := models.User{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} configs.ORMDB().Delete(&user) w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(user)) }