122 lines
3.0 KiB
Go
122 lines
3.0 KiB
Go
package model
|
||
|
||
import (
|
||
"errors"
|
||
"one-api/common"
|
||
)
|
||
|
||
// Server 服务器配置表
|
||
type Server struct {
|
||
Id int `json:"id"`
|
||
Title string `json:"title" gorm:"type:varchar(255);not null"` // 服务器标题
|
||
Config string `json:"config" gorm:"type:text"` // 配置信息
|
||
Price float64 `json:"price" gorm:"not null"` // 价格(单位:元)
|
||
Duration int `json:"duration" gorm:"not null"` // 时长(单位:天)
|
||
Status int `json:"status" gorm:"default:1"` // 状态:1-启用,2-禁用
|
||
CreatedTime int64 `json:"created_time" gorm:"bigint"`
|
||
UpdatedTime int64 `json:"updated_time" gorm:"bigint"`
|
||
Description string `json:"description" gorm:"type:text"` // 服务器描述
|
||
Stock int `json:"stock" gorm:"default:-1"` // 库存数量,-1表示无限
|
||
}
|
||
|
||
func (server *Server) Insert() error {
|
||
server.CreatedTime = common.GetTimestamp()
|
||
server.UpdatedTime = common.GetTimestamp()
|
||
return DB.Create(server).Error
|
||
}
|
||
|
||
func (server *Server) Update() error {
|
||
server.UpdatedTime = common.GetTimestamp()
|
||
return DB.Save(server).Error
|
||
}
|
||
|
||
func GetServerById(id int) (*Server, error) {
|
||
if id == 0 {
|
||
return nil, errors.New("id 为空")
|
||
}
|
||
server := Server{Id: id}
|
||
err := DB.First(&server, "id = ?", id).Error
|
||
return &server, err
|
||
}
|
||
|
||
func GetAllServers(pageInfo *common.PageInfo) (servers []*Server, total int64, err error) {
|
||
tx := DB.Begin()
|
||
if tx.Error != nil {
|
||
return nil, 0, tx.Error
|
||
}
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
}
|
||
}()
|
||
|
||
err = tx.Model(&Server{}).Count(&total).Error
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return nil, 0, err
|
||
}
|
||
|
||
err = tx.Order("id desc").Limit(pageInfo.GetPageSize()).Offset(pageInfo.GetStartIdx()).Find(&servers).Error
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return nil, 0, err
|
||
}
|
||
|
||
if err = tx.Commit().Error; err != nil {
|
||
return nil, 0, err
|
||
}
|
||
|
||
return servers, total, nil
|
||
}
|
||
|
||
func GetEnabledServers() ([]*Server, error) {
|
||
var servers []*Server
|
||
err := DB.Where("status = ?", 1).Order("id asc").Find(&servers).Error
|
||
return servers, err
|
||
}
|
||
|
||
func DeleteServerById(id int) error {
|
||
if id == 0 {
|
||
return errors.New("id 为空")
|
||
}
|
||
return DB.Delete(&Server{}, "id = ?", id).Error
|
||
}
|
||
|
||
func SearchServers(keyword string, startIdx int, num int) ([]*Server, int64, error) {
|
||
var servers []*Server
|
||
var total int64
|
||
|
||
tx := DB.Begin()
|
||
if tx.Error != nil {
|
||
return nil, 0, tx.Error
|
||
}
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
}
|
||
}()
|
||
|
||
query := tx.Model(&Server{})
|
||
if keyword != "" {
|
||
query = query.Where("title LIKE ? OR description LIKE ?", "%"+keyword+"%", "%"+keyword+"%")
|
||
}
|
||
|
||
err := query.Count(&total).Error
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return nil, 0, err
|
||
}
|
||
|
||
err = query.Order("id desc").Limit(num).Offset(startIdx).Find(&servers).Error
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return nil, 0, err
|
||
}
|
||
|
||
if err = tx.Commit().Error; err != nil {
|
||
return nil, 0, err
|
||
}
|
||
|
||
return servers, total, nil
|
||
}
|