合併
This commit is contained in:
		@@ -38,6 +38,7 @@ POST   | /api/{name}                    | 篩選:創建新對象
 | 
				
			|||||||
- [ ] /api/models/{model_id}  [#模型詳情](#模型詳情)
 | 
					- [ ] /api/models/{model_id}  [#模型詳情](#模型詳情)
 | 
				
			||||||
- [ ] /api/images/{image_id}  [#圖片詳情](#圖片詳情)
 | 
					- [ ] /api/images/{image_id}  [#圖片詳情](#圖片詳情)
 | 
				
			||||||
- [ ] /api/params/{params_id} [#參數詳情](#參數詳情)
 | 
					- [ ] /api/params/{params_id} [#參數詳情](#參數詳情)
 | 
				
			||||||
 | 
					- [ ] /api/server/{server_id} [#服務詳情](#服務詳情)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
詳情接口-請求方式:
 | 
					詳情接口-請求方式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,9 @@ func init() {
 | 
				
			|||||||
		CREATE TABLE IF NOT EXISTS users(
 | 
							CREATE TABLE IF NOT EXISTS users(
 | 
				
			||||||
			id INTEGER PRIMARY KEY AUTOINCREMENT,
 | 
								id INTEGER PRIMARY KEY AUTOINCREMENT,
 | 
				
			||||||
			name TEXT,
 | 
								name TEXT,
 | 
				
			||||||
 | 
								email TEXT,
 | 
				
			||||||
			password TEXT,
 | 
								password TEXT,
 | 
				
			||||||
 | 
								slat TEXT,
 | 
				
			||||||
			created_at TEXT,
 | 
								created_at TEXT,
 | 
				
			||||||
			updated_at TEXT
 | 
								updated_at TEXT
 | 
				
			||||||
		);
 | 
							);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ import (
 | 
				
			|||||||
type Server struct {
 | 
					type Server struct {
 | 
				
			||||||
	ID        int    `json:"id"`
 | 
						ID        int    `json:"id"`
 | 
				
			||||||
	Name      string `json:"name"`
 | 
						Name      string `json:"name"`
 | 
				
			||||||
 | 
						Type      string `json:"type"` // (訓練|推理)
 | 
				
			||||||
	IP        string `json:"ip"`
 | 
						IP        string `json:"ip"`
 | 
				
			||||||
	Port      int    `json:"port"`
 | 
						Port      int    `json:"port"`
 | 
				
			||||||
	Username  string `json:"username"`
 | 
						Username  string `json:"username"`
 | 
				
			||||||
@@ -3,6 +3,9 @@ package models
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"main/configs"
 | 
						"main/configs"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Task struct {
 | 
					type Task struct {
 | 
				
			||||||
@@ -16,6 +19,49 @@ type Task struct {
 | 
				
			|||||||
	UserID    int    `json:"user_id"`
 | 
						UserID    int    `json:"user_id"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 推理任務
 | 
				
			||||||
 | 
					func startInferenceTask(task *Task) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 獲取一臺可用的 GPU 資源
 | 
				
			||||||
 | 
						// ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 執行推理任務
 | 
				
			||||||
 | 
						// ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 更新任務狀態
 | 
				
			||||||
 | 
						task.Status = "running"
 | 
				
			||||||
 | 
						task.Progress = 0
 | 
				
			||||||
 | 
						task.Update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 監聽任務狀態
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							// 延遲 1 秒
 | 
				
			||||||
 | 
							time.Sleep(1 * time.Second)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 查詢任務狀態
 | 
				
			||||||
 | 
							resp, err := http.Get("http://localhost:5000/api/v1/tasks/" + strconv.Itoa(task.ID))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Println(err)
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							defer resp.Body.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 解析任務狀態
 | 
				
			||||||
 | 
							// ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 更新任務狀態
 | 
				
			||||||
 | 
							task.Progress = 100
 | 
				
			||||||
 | 
							task.Status = "success"
 | 
				
			||||||
 | 
							task.Update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 任務結束判定
 | 
				
			||||||
 | 
							if task.Progress == 100 {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (task *Task) Create() error {
 | 
					func (task *Task) Create() error {
 | 
				
			||||||
	db, err := configs.GetDB()
 | 
						db, err := configs.GetDB()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,8 @@ type User struct {
 | 
				
			|||||||
	ID        int    `json:"id"`
 | 
						ID        int    `json:"id"`
 | 
				
			||||||
	Name      string `json:"name"`
 | 
						Name      string `json:"name"`
 | 
				
			||||||
	Email     string `json:"email"`
 | 
						Email     string `json:"email"`
 | 
				
			||||||
 | 
						Password  string `json:"password"`
 | 
				
			||||||
 | 
						Slat      string `json:"slat"`
 | 
				
			||||||
	CreatedAt string `json:"created_at"`
 | 
						CreatedAt string `json:"created_at"`
 | 
				
			||||||
	UpdatedAt string `json:"updated_at"`
 | 
						UpdatedAt string `json:"updated_at"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -136,3 +138,43 @@ func (user *User) GetByEmail() error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func QueryUsers(page, pagesize int) (list []interface{}) {
 | 
				
			||||||
 | 
						db, err := configs.GetDB()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Println(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer db.Close()
 | 
				
			||||||
 | 
						rows, err := db.Query("SELECT id, name, email, created_at, updated_at FROM users LIMIT ?, ?", (page-1)*pagesize, pagesize)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Println(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer rows.Close()
 | 
				
			||||||
 | 
						for rows.Next() {
 | 
				
			||||||
 | 
							var user User
 | 
				
			||||||
 | 
							err := rows.Scan(&user.ID, &user.Name, &user.Email, &user.CreatedAt, &user.UpdatedAt)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Println(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							list = append(list, user)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func CountUsers() (count int) {
 | 
				
			||||||
 | 
						db, err := configs.GetDB()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Println(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer db.Close()
 | 
				
			||||||
 | 
						err = db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Println(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								routers/users.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								routers/users.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package routers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"main/models"
 | 
				
			||||||
 | 
						"main/utils"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func UsersGet(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.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())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user