封面
This commit is contained in:
@@ -63,6 +63,7 @@ type Model struct {
|
||||
ModelPath string `json:"model_path"` // 模型路徑
|
||||
Status string `json:"status"` // (waiting|running|success|error)
|
||||
Progress int `json:"progress"` // (0-100)
|
||||
Image string `json:"image"` // 封面圖片實際地址
|
||||
Tags string `json:"tags"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
@@ -249,10 +250,12 @@ GET /api/models
|
||||
|
||||
Method | URL | Info
|
||||
-------|--------------------------------|------------------
|
||||
GET | /api/models | 獲取所有模型
|
||||
GET | /api/models?user=1234 | 僅取指定用戶的(按用戶ID過濾)
|
||||
GET | /api/models?tag=xxx | 按標籤分類篩選
|
||||
GET | /api/models?public=true | 僅取公開的
|
||||
GET | /api/models?public=false | 僅取私有的
|
||||
POST | /api/models | 創建一個模型
|
||||
|
||||
* 如果未登錄, 返回的結果將過濾掉無權限查看的內容
|
||||
* 如果已登錄, 返回的結果將包含私有的
|
||||
|
38
configs/mysql.go
Normal file
38
configs/mysql.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package configs
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
// 數據庫配置
|
||||
type DBConfig struct {
|
||||
Type string `json:"type"`
|
||||
Host string `json:"host"`
|
||||
Port int `json:"port"`
|
||||
UserName string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Database string `json:"database"`
|
||||
}
|
||||
|
||||
var conf DBConfig
|
||||
|
||||
func init() {
|
||||
data, err := ioutil.ReadFile("./data/config.json")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
err = json.Unmarshal(data, &conf)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
func GetMySQL() (*sql.DB, error) {
|
||||
return sql.Open(conf.Type, conf.UserName+":"+conf.Password+"@/"+conf.Database)
|
||||
}
|
@@ -52,6 +52,7 @@ func init() {
|
||||
model_path TEXT,
|
||||
status TEXT,
|
||||
progress INTEGER,
|
||||
image TEXT,
|
||||
tags TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
|
1
go.mod
1
go.mod
@@ -3,6 +3,7 @@ module main
|
||||
go 1.18
|
||||
|
||||
require (
|
||||
github.com/go-sql-driver/mysql v1.7.1
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/gorilla/websocket v1.5.0
|
||||
github.com/mattn/go-sqlite3 v1.14.16
|
||||
|
2
go.sum
2
go.sum
@@ -1,3 +1,5 @@
|
||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
|
35
main.go
35
main.go
@@ -21,7 +21,23 @@ func main() {
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
|
||||
r := mux.NewRouter()
|
||||
r.Use(middleware)
|
||||
|
||||
// 設定中間件
|
||||
r.Use(func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*") // 處理跨域請求
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
|
||||
if r.Method == "OPTIONS" {
|
||||
w.WriteHeader(http.StatusOK) // 處理OPTIONS請求
|
||||
return
|
||||
}
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
})
|
||||
|
||||
// 設定路由
|
||||
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
t, _ := template.ParseFiles("templates/index.html")
|
||||
t.Execute(w, nil)
|
||||
@@ -308,23 +324,6 @@ func tasks_item_delete(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write(ToJSON(task))
|
||||
}
|
||||
|
||||
// 中間件, 通用
|
||||
func middleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
|
||||
// 處理跨域請求
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
|
||||
// 處理OPTIONS請求
|
||||
if r.Method == "OPTIONS" {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
return
|
||||
}
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
func ToJSON(object interface{}) []byte {
|
||||
json, err := json.MarshalIndent(object, "", " ")
|
||||
if err != nil {
|
||||
|
@@ -29,73 +29,3 @@ func (listview *ListView) ToJSON() []byte {
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
//// 查詢數據(分頁, 每頁數量, 排序, 條件, 關聯, 獲取總數)
|
||||
//func (listview *ListView) Read(name string, page int64, page_size int64) error {
|
||||
//
|
||||
// // 獲取數據庫連接
|
||||
// db, err := configs.GetDB()
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // 獲取總數
|
||||
// var total int64
|
||||
// err = db.QueryRow("SELECT COUNT(*) FROM " + name).Scan(&total)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // 獲取數據
|
||||
// rows, err := db.Query("SELECT * FROM "+name+" LIMIT ?, ?", (page-1)*page_size, page_size)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
// defer rows.Close()
|
||||
//
|
||||
// // 將數據轉換成對象
|
||||
// switch name {
|
||||
// case "images":
|
||||
// for rows.Next() {
|
||||
// var image Image
|
||||
// err = rows.Scan(&image.ID, &image.Name, &image.CreatedAt, &image.UpdatedAt)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
// listview.List = append(listview.List, image)
|
||||
// }
|
||||
// case "models":
|
||||
// for rows.Next() {
|
||||
// var model Model
|
||||
// err = rows.Scan(&model.ID, &model.Name, &model.CreatedAt, &model.UpdatedAt)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
// listview.List = append(listview.List, model)
|
||||
// }
|
||||
// default:
|
||||
// for rows.Next() {
|
||||
// var object Object
|
||||
// err = rows.Scan(&object.ID, &object.Name, &object.CreatedAt, &object.UpdatedAt)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// return err
|
||||
// }
|
||||
// listview.List = append(listview.List, object)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 設置返回值
|
||||
// listview.Code = 0
|
||||
// listview.Page = page
|
||||
// listview.PageSize = page_size
|
||||
// listview.Total = total
|
||||
// listview.Next = total > page*page_size
|
||||
//
|
||||
// return nil
|
||||
//}
|
||||
|
@@ -14,6 +14,7 @@ type Model struct {
|
||||
ModelPath string `json:"model_path"` // 模型路徑
|
||||
Status string `json:"status"` // (waiting|running|success|error)
|
||||
Progress int `json:"progress"` // (0-100)
|
||||
Image string `json:"image"` // 封面圖片實際地址
|
||||
Tags string `json:"tags"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
|
Reference in New Issue
Block a user