API/model/server.go
2025-10-09 10:44:22 +08:00

122 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}