From d7a645151ce4a640718549e09fee3c88be6afa58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Fri, 12 May 2023 14:16:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E4=BD=B5=E8=BC=B8=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++++------- models/ListView.go | 9 +++++++- models/Tag.go | 45 +++++++++++++++++++++++++++++++++++++-- routers/images.go | 3 +-- routers/models.go | 3 +-- routers/servers.go | 3 +-- routers/sessions.go | 3 +-- routers/tags.go | 51 +++++++++++++++++++++++++++++++++++++++++++++ routers/tasks.go | 3 +-- routers/users.go | 3 +-- 10 files changed, 115 insertions(+), 22 deletions(-) create mode 100644 routers/tags.go diff --git a/README.md b/README.md index b5b792f..7059d0c 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ ai 繪圖服務端(快速重構) TEST: -- [ ] [/api/users](/api/users) -- [ ] [/api/sessions](/api/sessions) -- [ ] [/api/servers](/api/servers) -- [ ] [/api/models](/api/models) -- [ ] [/api/images](/api/images) -- [ ] [/api/tasks](/api/tasks) -- [ ] [/api/tags](/api/tags) +- [x] GET [/api/users](/api/users) 用戶列表 +- [x] GET [/api/sessions](/api/sessions) 會話列表 +- [x] GET [/api/servers](/api/servers) 服務器列表 +- [x] GET [/api/models](/api/models) 模型列表 +- [x] GET [/api/images](/api/images) 圖片列表 +- [x] GET [/api/tasks](/api/tasks) 任務列表 +- [ ] GET [/api/tags](/api/tags) 標籤列表 列表接口: diff --git a/models/ListView.go b/models/ListView.go index ca6d488..d218b49 100644 --- a/models/ListView.go +++ b/models/ListView.go @@ -3,6 +3,7 @@ package models import ( "encoding/json" "log" + "net/http" ) type ListView struct { @@ -13,7 +14,7 @@ type ListView struct { List []interface{} `json:"list"` } -// 輸出JSON給瀏覽器 +// 轉換爲JSON並返回 func (listview *ListView) ToJSON() []byte { // 即使list爲空,也要返回空的JSON數組 @@ -29,3 +30,9 @@ func (listview *ListView) ToJSON() []byte { } return b } + +// 直接輸出JSON給瀏覽器 +func (listview *ListView) WriteJSON(w http.ResponseWriter) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(listview.ToJSON()) +} diff --git a/models/Tag.go b/models/Tag.go index f26dab7..5614916 100644 --- a/models/Tag.go +++ b/models/Tag.go @@ -12,7 +12,7 @@ type Tag struct { UpdatedAt string `json:"updated_at"` } -func (tag *Tag) Create() error { +func (tag *Tag) Create(name string) error { db, err := configs.GetDB() if err != nil { log.Println(err) @@ -25,7 +25,7 @@ func (tag *Tag) Create() error { return err } defer stmt.Close() - result, err := stmt.Exec(tag.Name, tag.CreatedAt, tag.UpdatedAt) + result, err := stmt.Exec(name, tag.CreatedAt, tag.UpdatedAt) if err != nil { log.Println(err) return err @@ -139,3 +139,44 @@ func GetTagByName(name string) (*Tag, error) { } return &tag, nil } + +func QueryTags(page, pagesize int) (list []interface{}) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return nil + } + defer db.Close() + rows, err := db.Query("SELECT * FROM tags LIMIT ?, ?", page, pagesize) + if err != nil { + log.Println(err) + return nil + } + defer rows.Close() + for rows.Next() { + var tag Tag + err := rows.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) + if err != nil { + log.Println(err) + return nil + } + list = append(list, tag) + } + return list +} + +func CountTags() (count int) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return 0 + } + defer db.Close() + row := db.QueryRow("SELECT COUNT(*) FROM tags") + err = row.Scan(&count) + if err != nil { + log.Println(err) + return 0 + } + return count +} diff --git a/routers/images.go b/routers/images.go index 55c0433..ad877a8 100644 --- a/routers/images.go +++ b/routers/images.go @@ -18,8 +18,7 @@ func ImagesGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QueryImages(listview.Page, listview.PageSize) listview.Total = models.CountImages() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } func ImagesPost(w http.ResponseWriter, r *http.Request) { diff --git a/routers/models.go b/routers/models.go index 0a55909..e3567d3 100644 --- a/routers/models.go +++ b/routers/models.go @@ -22,8 +22,7 @@ func ModelsGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QueryModels(listview.Page, listview.PageSize) listview.Total = models.CountModels() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } func ModelsPost(w http.ResponseWriter, r *http.Request) { diff --git a/routers/servers.go b/routers/servers.go index bb11d4d..85b4fea 100644 --- a/routers/servers.go +++ b/routers/servers.go @@ -15,8 +15,7 @@ func ServersGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QueryServers(listview.Page, listview.PageSize) listview.Total = models.CountServers() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } func ServersPost(w http.ResponseWriter, r *http.Request) { diff --git a/routers/sessions.go b/routers/sessions.go index dbefbcc..a1b760a 100644 --- a/routers/sessions.go +++ b/routers/sessions.go @@ -16,8 +16,7 @@ func SessionsGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QuerySessions(listview.Page, listview.PageSize) listview.Total = models.CountSessions() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } // 創建會話 diff --git a/routers/tags.go b/routers/tags.go new file mode 100644 index 0000000..322b76c --- /dev/null +++ b/routers/tags.go @@ -0,0 +1,51 @@ +package routers + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "main/models" + "main/utils" + "net/http" +) + +// 獲取標籤列表 +func TagsGet(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) + listview.List = models.QueryTags(listview.Page, listview.PageSize) + listview.Total = models.CountTags() + listview.Next = listview.Page*listview.PageSize < listview.Total + listview.WriteJSON(w) +} + +// 創建標籤 +func TagsPost(w http.ResponseWriter, r *http.Request) { + var form struct { + Name string `json:"name"` + } + 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 + } + // 創建標籤 + var tag models.Tag + if err := tag.Create(form.Name); err != nil { + fmt.Println(err) + return + } + // 返回信息 + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(tag)) +} + +// 獲取標籤 +func TagsItemGet(w http.ResponseWriter, r *http.Request) { +} diff --git a/routers/tasks.go b/routers/tasks.go index 58a8d02..c97c866 100644 --- a/routers/tasks.go +++ b/routers/tasks.go @@ -20,8 +20,7 @@ func TasksGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QueryTasks(listview.Page, listview.PageSize) listview.Total = models.CountTasks() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } func TasksPost(w http.ResponseWriter, r *http.Request) { diff --git a/routers/users.go b/routers/users.go index b2a83b1..db4f20a 100644 --- a/routers/users.go +++ b/routers/users.go @@ -19,8 +19,7 @@ func UsersGet(w http.ResponseWriter, r *http.Request) { listview.List = models.QueryUsers(listview.Page, listview.PageSize) listview.Total = models.CountUsers() listview.Next = listview.Page*listview.PageSize < listview.Total - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.Write(listview.ToJSON()) + listview.WriteJSON(w) } // 創建用戶