This commit is contained in:
2023-04-25 16:49:39 +08:00
parent 954eb35c16
commit e9530604cf
11 changed files with 786 additions and 150 deletions

View File

@@ -242,6 +242,7 @@ POST /api/models
name: '', // 設定名稱 name: '', // 設定名稱
type: '', // 指定訓練類型 type: '', // 指定訓練類型
source: '', // 指定源模型ID source: '', // 指定源模型ID
type: '', // 模型類型(RoLa|SD2|SD1.5)
data: { data: {
oss: [], // 直接上傳到OSS的圖片地址列表 oss: [], // 直接上傳到OSS的圖片地址列表
images: [], // 指定圖片的ID們 images: [], // 指定圖片的ID們

65
configs/sqlite3.go Normal file
View File

@@ -0,0 +1,65 @@
package configs
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
// 使用SQLite3初始化數據庫
func init() {
// 初始化數據庫
db, err := sql.Open("sqlite3", "data/sqlite3.db")
if err != nil {
log.Fatal(err)
}
// 一次性創建多個數據表(自增主鍵)
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS images(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
created_at TEXT,
updated_at TEXT
);
CREATE TABLE IF NOT EXISTS models(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
created_at TEXT,
updated_at TEXT
);
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
password TEXT,
created_at TEXT,
updated_at TEXT
);
CREATE TABLE IF NOT EXISTS tags(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
created_at TEXT,
updated_at TEXT
);
CREATE TABLE IF NOT EXISTS tasks(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
created_at TEXT,
updated_at TEXT
);
`)
defer db.Close()
if err != nil {
log.Fatal(err)
}
}
// GetDB 獲取數據庫連接
func GetDB() (*sql.DB, error) {
db, err := sql.Open("sqlite3", "data/sqlite3.db")
if err != nil {
return nil, err
}
return db, nil
}

5
go.mod
View File

@@ -2,4 +2,7 @@ module main
go 1.18 go 1.18
require github.com/mattn/go-sqlite3 v1.14.16 require (
github.com/gorilla/mux v1.8.0
github.com/mattn/go-sqlite3 v1.14.16
)

2
go.sum
View File

@@ -1,2 +1,4 @@
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=

435
main.go
View File

@@ -1,18 +1,158 @@
package main package main
import ( import (
"encoding/json"
"fmt" "fmt"
"io/ioutil"
"log" "log"
"net/http" "net/http"
"runtime" "runtime"
"strconv"
"time" "time"
"main/models" "main/models"
"github.com/gorilla/mux"
) )
type Object interface {
ToJSON() []byte
}
func CreateObject(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 從body中獲取收到的JSON數據
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
defer r.Body.Close()
// 將JSON數據轉換成目標對象
object := models.GetObject(mux.Vars(r)["name"], 0)
if err = json.Unmarshal(body, object); err != nil {
log.Println(err)
return
}
// 將對象存入數據庫
err = object.Create()
if err != nil {
log.Println(err)
return
}
// 返回結果
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(object.ToJSON())
return
}
func GetObjetc(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 獲取對象
object := models.GetObject(mux.Vars(r)["name"], ParamInt(mux.Vars(r)["id"], 0))
err := object.Get()
if err != nil {
log.Println(err)
return
}
// 返回結果
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(object.ToJSON())
return
}
func UpdateObject(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 從body中獲取收到的JSON數據
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
defer r.Body.Close()
// 將JSON數據轉換成目標對象
object := models.GetObject(mux.Vars(r)["name"], ParamInt(mux.Vars(r)["id"], 0))
if err = json.Unmarshal(body, object); err != nil {
log.Println(err)
return
}
// 更新對象
err = object.Update()
if err != nil {
log.Println(err)
return
}
// 返回結果
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(object.ToJSON())
return
}
func DeleteObject(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 刪除對象
object := models.GetObject(mux.Vars(r)["name"], ParamInt(mux.Vars(r)["id"], 0))
err := object.Delete()
if err != nil {
log.Println(err)
return
}
// 返回結果
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(object.ToJSON())
return
}
func GetObjects(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
var listview models.ListView
// 獲取查詢參數: page, pageSize
name := mux.Vars(r)["name"]
page := ParamInt(r.URL.Query().Get("page"), 1)
pagesize := ParamInt(r.URL.Query().Get("pageSize"), 10)
// 獲取對象列表
listview.Read(name, page, pagesize)
// 返回結果
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJSON())
return
}
func main() { func main() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
r := mux.NewRouter()
r.HandleFunc("/api/{name}", GetObjects).Methods("GET")
r.HandleFunc("/api/{name}", CreateObject).Methods("POST")
r.HandleFunc("/api/{name}/{id}", GetObjetc).Methods("GET")
r.HandleFunc("/api/{name}/{id}", UpdateObject).Methods("PATCH")
r.HandleFunc("/api/{name}/{id}", DeleteObject).Methods("DELETE")
http.ListenAndServe(":8080", r)
// 初始化數據庫
//db, err := configs.GetDB()
//if err != nil {
// log.Fatal(err)
//}
/**
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
wecome := "Welcome to the home page!" wecome := "Welcome to the home page!"
@@ -20,51 +160,274 @@ func main() {
}) })
http.HandleFunc("/api/images", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api/images", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 處理GET請求
if r.Method == "GET" {
var listview models.ListView var listview models.ListView
// 獲取查詢參數: page, pageSize
listview.Page = ParamInt(r.URL.Query().Get("page"), 1)
listview.PageSize = ParamInt(r.URL.Query().Get("pageSize"), 10)
// 拼接查詢條件
condition := ""
if user_id := ParamString(r.URL.Query().Get("user_id"), ""); user_id != "" {
condition += fmt.Sprintf(" AND user_id = '%s'", user_id)
}
if created_at := ParamString(r.URL.Query().Get("created_at"), ""); created_at != "" {
condition += fmt.Sprintf(" AND created_at = '%s'", created_at)
}
if updated_at := ParamString(r.URL.Query().Get("updated_at"), ""); updated_at != "" {
condition += fmt.Sprintf(" AND updated_at = '%s'", updated_at)
}
// 獲取總數
row := db.QueryRow("SELECT COUNT(*) FROM images WHERE 1 = 1" + condition)
err := row.Scan(&listview.Total)
if err != nil {
log.Println(err)
return
}
// 從數據庫查詢一組圖片
rows, err := db.Query("SELECT id, name, created_at, updated_at FROM images LIMIT ?, ?", (listview.Page-1)*listview.PageSize, listview.PageSize)
if err != nil {
log.Println(err)
return
}
defer rows.Close()
// 將查詢結果裝載到ListView中
for rows.Next() {
var image models.Image
err := rows.Scan(&image.ID, &image.Name, &image.CreatedAt, &image.UpdatedAt)
if err != nil {
log.Println(err)
return
}
listview.List = append(listview.List, image)
}
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJson()) w.Write(listview.ToJSON())
return
}
// 處理POST請求
if r.Method == "POST" {
// 從body中獲取收到的JSON數據
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
// 將JSON數據轉換成Image對象
image := models.Image{}
err = image.FromJSON(body)
if err != nil {
log.Println(err)
return
}
// 將Image對象存入數據庫
err = image.Create()
if err != nil {
log.Println(err)
return
}
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(image.ToJSON())
return
}
// 處理DELETE請求
if r.Method == "DELETE" {
// 從body中獲取收到的JSON數據
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
// 將JSON數據轉換成Image對象
image := models.Image{}
err = image.FromJSON(body)
if err != nil {
log.Println(err)
return
}
// 將Image對象從數據庫中刪除
err = image.Delete()
if err != nil {
log.Println(err)
return
}
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(image.ToJSON())
return
}
}) })
http.HandleFunc("/api/models", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api/models", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
var listview models.ListView
// 創建一個模型
if r.Method == "POST" {
// 從body中解析出模型
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
defer r.Body.Close()
// 將JSON數據轉換成Model對象
var model models.Model
if err := json.Unmarshal(body, &model); err != nil {
log.Println(err)
return
}
// 將Model對象存入數據庫
err = model.Create()
if err != nil {
log.Println(err)
return
}
// 返回創建的模型
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJson()) w.Write(model.ToJSON())
return
}
// 查詢一組模型
if r.Method == "GET" {
var listview models.ListView
// 獲取查詢參數: page, pageSize
listview.Page = ParamInt(r.URL.Query().Get("page"), 1)
listview.PageSize = ParamInt(r.URL.Query().Get("pageSize"), 10)
// 拼接查詢條件
condition := ""
if user_id := ParamString(r.URL.Query().Get("user_id"), ""); user_id != "" {
condition += fmt.Sprintf(" AND user_id = '%s'", user_id)
}
if created_at := ParamString(r.URL.Query().Get("created_at"), ""); created_at != "" {
condition += fmt.Sprintf(" AND created_at = '%s'", created_at)
}
if updated_at := ParamString(r.URL.Query().Get("updated_at"), ""); updated_at != "" {
condition += fmt.Sprintf(" AND updated_at = '%s'", updated_at)
}
// 從數據庫查詢一組模型
rows, err := db.Query("SELECT id, name, created_at, updated_at FROM models LIMIT ?, ?", (listview.Page-1)*listview.PageSize, listview.PageSize)
if err != nil {
log.Println(err)
return
}
defer rows.Close()
// 將查詢結果裝載到ListView中
for rows.Next() {
var model models.Model
err := rows.Scan(&model.ID, &model.Name, &model.CreatedAt, &model.UpdatedAt)
if err != nil {
log.Println(err)
return
}
listview.List = append(listview.List, model)
}
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJSON())
return
}
}) })
http.HandleFunc("/api/tasks", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api/tasks", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
// 查詢一組任務 // 創建一個任務
// tasks, err := models.GetTasks() if r.Method == "POST" {
// if err != nil { task := models.Task{}
// log.Println(err) task.Type = ParamString(r.URL.Query().Get("type"), "")
// return task.CreatedAt = ParamString(r.URL.Query().Get("created_at"), "")
// } task.UpdatedAt = ParamString(r.URL.Query().Get("updated_at"), "")
// fmt.Println(tasks) err := task.Create()
if err != nil {
// 將取得的任務裝載到ListView中 log.Println(err)
// listView := ListView{} return
// for _, task := range tasks { }
// listView.Tasks = append(listView.Tasks, task)
// }
var listview models.ListView
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJson()) w.Write(task.ToJSON())
return
}
// 查詢一組任務
if r.Method == "GET" {
var listview models.ListView
// 獲取查詢參數: page, pageSize
listview.Page = ParamInt(r.URL.Query().Get("page"), 1)
listview.PageSize = ParamInt(r.URL.Query().Get("pageSize"), 10)
// 拼接查詢條件
condition := ""
if user_id := ParamString(r.URL.Query().Get("user_id"), ""); user_id != "" {
condition += fmt.Sprintf(" AND user_id = '%s'", user_id)
}
if created_at := ParamString(r.URL.Query().Get("created_at"), ""); created_at != "" {
condition += fmt.Sprintf(" AND created_at = '%s'", created_at)
}
if updated_at := ParamString(r.URL.Query().Get("updated_at"), ""); updated_at != "" {
condition += fmt.Sprintf(" AND updated_at = '%s'", updated_at)
}
// 從數據庫查詢一組任務
rows, err := db.Query("SELECT id, type, created_at, updated_at FROM tasks LIMIT ?, ?", (listview.Page-1)*listview.PageSize, listview.PageSize)
if err != nil {
log.Println(err)
return
}
defer rows.Close()
// 將查詢結果裝載到ListView中
for rows.Next() {
var task models.Task
err := rows.Scan(&task.ID, &task.Type, &task.CreatedAt, &task.UpdatedAt)
if err != nil {
log.Println(err)
return
}
listview.List = append(listview.List, task)
}
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJSON())
return
}
}) })
http.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
var listview models.ListView var listview models.ListView
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJson()) w.Write(listview.ToJSON())
}) })
http.HandleFunc("/api/tags", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/api/tags", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
var listview models.ListView var listview models.ListView
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write(listview.ToJson()) w.Write(listview.ToJSON())
}) })
log.Println("Web Server is running on http://localhost:8080") log.Println("Web Server is running on http://localhost:8080")
http.ListenAndServe(":8080", nil) http.ListenAndServe(":8080", nil)
**/
} }
func LogComponent(startTime int64, r *http.Request) { func LogComponent(startTime int64, r *http.Request) {
@@ -88,3 +451,35 @@ func LogComponent(startTime int64, r *http.Request) {
url := fmt.Sprintf("\033[1;34m%s\033[0m", r.URL) // 藍色加重 url := fmt.Sprintf("\033[1;34m%s\033[0m", r.URL) // 藍色加重
log.Println(method, url, endTime) log.Println(method, url, endTime)
} }
// 獲取查詢參數(int 類型)
func ParamInt(value string, defaultValue int64) int64 {
if value == "" {
return defaultValue
}
result, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return defaultValue
}
return result
}
// 獲取查詢參數(string 類型)
func ParamString(value string, defaultValue string) string {
if value == "" {
return defaultValue
}
return value
}
// 獲取查詢參數(bool 類型)
func ParamBool(value string, defaultValue bool) bool {
if value == "" {
return defaultValue
}
result, err := strconv.ParseBool(value)
if err != nil {
return defaultValue
}
return result
}

View File

@@ -1,24 +0,0 @@
package models
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type Image struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// 使用SQLite3初始化數據庫
func init() {
db, err := sql.Open("sqlite3", "data/sqlite3/image.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}

View File

@@ -3,19 +3,20 @@ package models
import ( import (
"encoding/json" "encoding/json"
"log" "log"
"main/configs"
) )
type ListView struct { type ListView struct {
Code int `json:"code"` Code int64 `json:"code"`
Page int `json:"page"` Page int64 `json:"page"`
PageSize int `json:"page_size"` PageSize int64 `json:"page_size"`
Total int `json:"total"` Total int64 `json:"total"`
Next bool `json:"next"` Next bool `json:"next"`
List []interface{} `json:"list"` List []interface{} `json:"list"`
} }
// 輸出JSON給瀏覽器 // 輸出JSON給瀏覽器
func (listview *ListView) ToJson() []byte { func (listview *ListView) ToJSON() []byte {
// 即使list爲空也要返回空的JSON數組 // 即使list爲空也要返回空的JSON數組
if listview.List == nil { if listview.List == nil {
@@ -30,3 +31,293 @@ func (listview *ListView) ToJson() []byte {
} }
return b 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
}
type Object struct {
ID int64 `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
tablename string
}
type Image struct {
Object
}
type Model struct {
Object
Type string `json:"type"`
}
type Tag struct {
Object
}
type User struct {
Object
}
type Task struct {
Object
}
type ObjectInterface interface {
Create() error
Delete() error
Update() error
Get() error
GetAll() ([]Object, error)
GetPage(page int64, page_size int64) (ListView, error)
ToJSON() []byte
}
// 按照名稱返回響應的對象類型
func GetObject(name string, id int64) ObjectInterface {
switch name {
case "images":
return &Image{
Object{tablename: name, ID: id},
}
default:
return &Object{tablename: name, ID: id}
}
}
// 創建對象
func (d *Object) Create() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
stmt, err := db.Prepare("INSERT INTO " + d.tablename + "(name, created_at, updated_at) values(?, ?, ?)")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
result, err := stmt.Exec(d.Name, d.CreatedAt, d.UpdatedAt)
if err != nil {
log.Println(err)
return err
}
id, err := result.LastInsertId()
if err != nil {
return err
}
d.ID = id
return nil
}
// 刪除對象
func (d *Object) Delete() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
stmt, err := db.Prepare("DELETE FROM " + d.tablename + " WHERE id = ?")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
_, err = stmt.Exec(d.ID)
if err != nil {
log.Println(err)
return err
}
return nil
}
// 更新對象
func (d *Object) Update() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
stmt, err := db.Prepare("UPDATE " + d.tablename + " SET name = ?, updated_at = ? WHERE id = ?")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
_, err = stmt.Exec(d.Name, d.UpdatedAt, d.ID)
if err != nil {
log.Println(err)
return err
}
return nil
}
// 獲取對象
func (d *Object) Get() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
stmt, err := db.Prepare("SELECT * FROM " + d.tablename + " WHERE id = ?")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
row := stmt.QueryRow(d.ID)
err = row.Scan(&d.ID, &d.Name, &d.CreatedAt, &d.UpdatedAt)
if err != nil {
log.Println(err)
return err
}
return nil
}
// 獲取所有對象
func (d *Object) GetAll() ([]Object, error) {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return nil, err
}
stmt, err := db.Prepare("SELECT * FROM " + d.tablename)
if err != nil {
log.Println(err)
return nil, err
}
defer stmt.Close()
rows, err := stmt.Query()
if err != nil {
log.Println(err)
return nil, err
}
defer rows.Close()
var list []Object
for rows.Next() {
var item Object
err = rows.Scan(&item.ID, &item.Name, &item.CreatedAt, &item.UpdatedAt)
if err != nil {
log.Println(err)
return nil, err
}
list = append(list, item)
}
return list, nil
}
// 獲取分頁對象
func (d *Object) GetPage(page int64, page_size int64) (ListView, error) {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return ListView{}, err
}
stmt, err := db.Prepare("SELECT * FROM " + d.tablename + " LIMIT ?, ?")
if err != nil {
log.Println(err)
return ListView{}, err
}
defer stmt.Close()
rows, err := stmt.Query((page-1)*page_size, page_size)
if err != nil {
log.Println(err)
return ListView{}, err
}
defer rows.Close()
var list []interface{}
for rows.Next() {
var item Object
err = rows.Scan(&item.ID, &item.Name, &item.CreatedAt, &item.UpdatedAt)
if err != nil {
log.Println(err)
return ListView{}, err
}
list = append(list, item)
}
var listview ListView
listview.Code = 0
listview.Page = page
listview.PageSize = page_size
listview.List = list
return listview, nil
}
// 轉換為格式化的JSON
func (d *Object) ToJSON() []byte {
b, err := json.MarshalIndent(d, "", " ")
if err != nil {
log.Println(err)
return nil
}
return b
}

View File

@@ -1,24 +0,0 @@
package models
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type Model struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// 使用SQLite3初始化數據庫
func init() {
db, err := sql.Open("sqlite3", "data/sqlite3/model.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}

View File

@@ -1,24 +0,0 @@
package models
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type Tag struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// 使用SQLite3初始化數據庫
func init() {
db, err := sql.Open("sqlite3", "data/sqlite3/tag.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}

View File

@@ -1,24 +0,0 @@
package models
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type Task struct {
ID string `json:"id"`
Type string `json:"type"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// 使用SQLite3初始化數據庫
func init() {
db, err := sql.Open("sqlite3", "data/sqlite3/task.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}

View File

@@ -1,25 +0,0 @@
package models
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID string `json:"id"`
UserName string `json:"username"`
Password string `json:"password"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// 使用SQLite3初始化數據庫
func init() {
db, err := sql.Open("sqlite3", "data/sqlite3/user.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}