合併
This commit is contained in:
		@@ -38,6 +38,7 @@ POST   | /api/{name}                    | 篩選:創建新對象
 | 
			
		||||
- [ ] /api/models/{model_id}  [#模型詳情](#模型詳情)
 | 
			
		||||
- [ ] /api/images/{image_id}  [#圖片詳情](#圖片詳情)
 | 
			
		||||
- [ ] /api/params/{params_id} [#參數詳情](#參數詳情)
 | 
			
		||||
- [ ] /api/server/{server_id} [#服務詳情](#服務詳情)
 | 
			
		||||
 | 
			
		||||
詳情接口-請求方式:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,9 @@ func init() {
 | 
			
		||||
		CREATE TABLE IF NOT EXISTS users(
 | 
			
		||||
			id INTEGER PRIMARY KEY AUTOINCREMENT,
 | 
			
		||||
			name TEXT,
 | 
			
		||||
			email TEXT,
 | 
			
		||||
			password TEXT,
 | 
			
		||||
			slat TEXT,
 | 
			
		||||
			created_at TEXT,
 | 
			
		||||
			updated_at TEXT
 | 
			
		||||
		);
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ import (
 | 
			
		||||
type Server struct {
 | 
			
		||||
	ID        int    `json:"id"`
 | 
			
		||||
	Name      string `json:"name"`
 | 
			
		||||
	Type      string `json:"type"` // (訓練|推理)
 | 
			
		||||
	IP        string `json:"ip"`
 | 
			
		||||
	Port      int    `json:"port"`
 | 
			
		||||
	Username  string `json:"username"`
 | 
			
		||||
@@ -3,6 +3,9 @@ package models
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"main/configs"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Task struct {
 | 
			
		||||
@@ -16,6 +19,49 @@ type Task struct {
 | 
			
		||||
	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 {
 | 
			
		||||
	db, err := configs.GetDB()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@ type User struct {
 | 
			
		||||
	ID        int    `json:"id"`
 | 
			
		||||
	Name      string `json:"name"`
 | 
			
		||||
	Email     string `json:"email"`
 | 
			
		||||
	Password  string `json:"password"`
 | 
			
		||||
	Slat      string `json:"slat"`
 | 
			
		||||
	CreatedAt string `json:"created_at"`
 | 
			
		||||
	UpdatedAt string `json:"updated_at"`
 | 
			
		||||
}
 | 
			
		||||
@@ -136,3 +138,43 @@ func (user *User) GetByEmail() error {
 | 
			
		||||
	}
 | 
			
		||||
	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