簡化傳參

This commit is contained in:
2023-05-16 02:56:25 +08:00
parent a6a8f257a4
commit 9681b09b05
4 changed files with 42 additions and 49 deletions

View File

@@ -13,6 +13,7 @@ type User struct {
Email string `json:"email"`
Password string `json:"-"`
Slat string `json:"-"`
Admin bool `json:"admin"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
}

View File

@@ -10,6 +10,7 @@ type Account struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
Admin bool `json:"admin"`
SessionID string `json:"session_id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
@@ -47,6 +48,7 @@ func AccountRead(w http.ResponseWriter, r *http.Request, cb func(account *Accoun
account.ID = user.ID
account.Name = user.Name
account.Email = user.Email
account.Admin = user.Admin
account.SessionID = session.ID
account.CreatedAt = user.CreatedAt
account.UpdatedAt = user.UpdatedAt

View File

@@ -2,9 +2,7 @@ package routers
import (
"crypto/md5"
"encoding/json"
"fmt"
"io/ioutil"
"main/configs"
"main/models"
"main/utils"
@@ -32,42 +30,26 @@ func UsersGet(w http.ResponseWriter, r *http.Request) {
// 創建用戶
func UsersPost(w http.ResponseWriter, r *http.Request) {
var form struct {
Name string `json:"name"`
Email string `json:"email"`
Password string `json:"password"`
}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Println(err)
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
}
defer r.Body.Close()
if err = json.Unmarshal(body, &form); err != nil {
fmt.Println(err)
return
}
if form.Name == "" || form.Email == "" || form.Password == "" {
fmt.Println("name, email, password cannot be empty")
return
}
// 創建用戶
var slat string = uuid.New().String()
var user models.User = models.User{
Name: form.Name,
Email: form.Email,
Password: fmt.Sprintf("%x", md5.Sum([]byte(form.Password+slat))),
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 {
fmt.Println(err)
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))
@@ -76,39 +58,32 @@ func UsersPost(w http.ResponseWriter, r *http.Request) {
// 獲取用戶
func UsersItemGet(w http.ResponseWriter, r *http.Request) {
user := models.User{ID: utils.ParamInt(mux.Vars(r)["id"], 0)}
configs.ORMDB().First(&user)
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) {
var form struct {
Name string `json:"name"`
Email string `json:"email"`
Password string `json:"password"`
}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Println(err)
return
}
defer r.Body.Close()
if err = json.Unmarshal(body, &form); err != nil {
fmt.Println(err)
return
}
form := utils.BodyRead(r)
user := models.User{ID: utils.ParamInt(mux.Vars(r)["id"], 0)}
configs.ORMDB().First(&user)
if form.Name != "" {
user.Name = form.Name
if name, ok := form["name"]; ok {
user.Name = name.(string)
}
if form.Email != "" {
user.Email = form.Email
if email, ok := form["email"]; ok {
user.Email = email.(string)
}
if form.Password != "" {
if password, ok := form["password"]; ok {
user.Slat = uuid.New().String()
user.Password = fmt.Sprintf("%x", md5.Sum([]byte(form.Password+user.Slat)))
user.Password = fmt.Sprintf("%x", md5.Sum([]byte(password.(string)+user.Slat)))
}
if admin, ok := form["admin"]; ok {
user.Admin = admin.(bool)
}
configs.ORMDB().Save(&user)
w.Header().Set("Content-Type", "application/json; charset=utf-8")

View File

@@ -3,6 +3,7 @@ package utils
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"math/rand"
"net/http"
@@ -10,6 +11,20 @@ import (
"time"
)
func BodyRead(r *http.Request) (form map[string]interface{}) {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
defer r.Body.Close()
if err = json.Unmarshal(body, &form); err != nil {
log.Println(err)
return
}
return
}
// 獲取查詢參數(int 類型)
func ParamInt(value string, defaultValue int) int {
if value == "" {