合併輸出
This commit is contained in:
		
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								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) 標籤列表
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
列表接口:
 | 
			
		||||
 
 | 
			
		||||
@@ -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())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 創建會話
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								routers/tags.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								routers/tags.go
									
									
									
									
									
										Normal file
									
								
							@@ -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) {
 | 
			
		||||
}
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 創建用戶
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user