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 }