This commit is contained in:
2023-04-28 06:32:33 +08:00
parent eb22bf188e
commit 115d948d0f
10 changed files with 1045 additions and 422 deletions

View File

@@ -3,14 +3,13 @@ package models
import (
"encoding/json"
"log"
"main/configs"
)
type ListView struct {
Code int64 `json:"code"`
Page int64 `json:"page"`
PageSize int64 `json:"page_size"`
Total int64 `json:"total"`
Code int `json:"code"`
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int `json:"total"`
Next bool `json:"next"`
List []interface{} `json:"list"`
}
@@ -32,292 +31,72 @@ 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
}
//// 查詢數據(分頁, 每頁數量, 排序, 條件, 關聯, 獲取總數)
//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
//}