歸併
This commit is contained in:
		@@ -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()
 | 
			
		||||
}
 | 
			
		||||
@@ -3,19 +3,20 @@ package models
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"log"
 | 
			
		||||
	"main/configs"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ListView struct {
 | 
			
		||||
	Code     int           `json:"code"`
 | 
			
		||||
	Page     int           `json:"page"`
 | 
			
		||||
	PageSize int           `json:"page_size"`
 | 
			
		||||
	Total    int           `json:"total"`
 | 
			
		||||
	Code     int64         `json:"code"`
 | 
			
		||||
	Page     int64         `json:"page"`
 | 
			
		||||
	PageSize int64         `json:"page_size"`
 | 
			
		||||
	Total    int64         `json:"total"`
 | 
			
		||||
	Next     bool          `json:"next"`
 | 
			
		||||
	List     []interface{} `json:"list"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 輸出JSON給瀏覽器
 | 
			
		||||
func (listview *ListView) ToJson() []byte {
 | 
			
		||||
func (listview *ListView) ToJSON() []byte {
 | 
			
		||||
 | 
			
		||||
	// 即使list爲空,也要返回空的JSON數組
 | 
			
		||||
	if listview.List == nil {
 | 
			
		||||
@@ -30,3 +31,293 @@ 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
}
 | 
			
		||||
@@ -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()
 | 
			
		||||
}
 | 
			
		||||
@@ -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()
 | 
			
		||||
}
 | 
			
		||||
@@ -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()
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user