From 119f579d70b6cee4cdd69b61f5e560099b3486b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Tue, 16 May 2023 05:30:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3params?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++ routers/dataset.go | 61 ++++++++++++++++++++++++++++++++++----------- routers/sessions.go | 4 +-- routers/users.go | 2 +- 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index c8bb470..5637595 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,17 @@ ai 繪圖服務端(快速重構) TEST: - [x] GET [/api/users](/api/users) 用戶列表 + - [x] 創建用戶 + - [x] 刪除用戶 + - [x] 修改用戶 + - [x] 查詢用戶 - [x] GET [/api/sessions](/api/sessions) 會話列表 + - [x] 登錄賬戶(創建會話) + - [x] 註銷登錄(刪除指定會話) +- [x] GET [/api/dataset](/api/dataset) 數據集列表 + - [ ] 創建數據集 + - [ ] 刪除數據集 + - [ ] 修改數據集 - [x] GET [/api/servers](/api/servers) 服務器列表 - [x] GET [/api/models](/api/models) 模型列表 - [x] GET [/api/images](/api/images) 圖片列表 diff --git a/routers/dataset.go b/routers/dataset.go index 5974fed..2308fe0 100644 --- a/routers/dataset.go +++ b/routers/dataset.go @@ -17,6 +17,7 @@ type Dataset struct { Name string `json:"name"` Type string `json:"type"` Info string `json:"info"` + UserID int `json:"user_id"` CreatedAt time.Time `json:"created_at" gorm:"default:CURRENT_TIMESTAMP;autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"default:CURRENT_TIMESTAMP;autoUpdateTime"` } @@ -41,14 +42,29 @@ func DatasetsGet(w http.ResponseWriter, r *http.Request) { } func DatasetsPost(w http.ResponseWriter, r *http.Request) { - dataset := Dataset{} - if err := configs.ORMDB().Create(&dataset).Error; err != nil { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte("500 - Internal Server Error")) - return - } - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(utils.ToJSON(dataset)) + models.AccountRead(w, r, func(account *models.Account) { + var dataset Dataset + body, err := ioutil.ReadAll(r.Body) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("500 - Internal Server Error")) + return + } + defer r.Body.Close() + if err = json.Unmarshal(body, &dataset); err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("500 - Internal Server Error")) + return + } + dataset.UserID = account.ID + if err := configs.ORMDB().Create(&dataset).Error; err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("500 - Internal Server Error")) + return + } + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(dataset)) + }) } // 獲取數據集 @@ -96,11 +112,26 @@ func DatasetsItemPatch(w http.ResponseWriter, r *http.Request) { } func DatasetsItemDelete(w http.ResponseWriter, r *http.Request) { - dataset := Dataset{ID: utils.ParamInt(mux.Vars(r)["dataset_id"], 0)} - if err := configs.ORMDB().Delete(&dataset).Error; err != nil { - w.WriteHeader(http.StatusNotFound) - w.Write([]byte("404 - Not Found")) - return - } - w.WriteHeader(http.StatusNoContent) + models.AccountRead(w, r, func(account *models.Account) { + // 獲取數據集 + dataset := Dataset{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} + if err := configs.ORMDB().Find(&dataset).Error; err != nil { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("404 - Not Found")) + return + } + // 只能刪除自己的數據集, 除非是管理員 + if dataset.UserID != account.ID && !account.Admin { + w.WriteHeader(http.StatusForbidden) + w.Write([]byte("403 - Forbidden")) + return + } + // 刪除數據集 + if err := configs.ORMDB().Delete(&dataset).Error; err != nil { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("404 - Not Found")) + return + } + w.WriteHeader(http.StatusNoContent) + }) } diff --git a/routers/sessions.go b/routers/sessions.go index 7b73390..19e4832 100644 --- a/routers/sessions.go +++ b/routers/sessions.go @@ -94,7 +94,7 @@ func SessionsPost(w http.ResponseWriter, r *http.Request) { // 獲取會話 func SessionsItemGet(w http.ResponseWriter, r *http.Request) { - session := models.Session{ID: mux.Vars(r)["session_id"]} + session := models.Session{ID: mux.Vars(r)["id"]} if err := configs.ORMDB().Find(&session).Error; err != nil { w.WriteHeader(http.StatusNotFound) w.Write([]byte("404 - Not Found")) @@ -106,7 +106,7 @@ func SessionsItemGet(w http.ResponseWriter, r *http.Request) { // 更新會話 func SessionsItemPatch(w http.ResponseWriter, r *http.Request) { - session := models.Session{ID: mux.Vars(r)["session_id"]} + session := models.Session{ID: mux.Vars(r)["id"]} if err := configs.ORMDB().Model(&session).Updates(GetForm(r)).Error; err != nil { w.WriteHeader(http.StatusNotFound) w.Write([]byte("404 - Not Found")) diff --git a/routers/users.go b/routers/users.go index daa9867..6af5183 100644 --- a/routers/users.go +++ b/routers/users.go @@ -115,7 +115,7 @@ func UsersItemDelete(w http.ResponseWriter, r *http.Request) { models.AccountRead(w, r, func(account *models.Account) { var user models.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()))