Files
1Panel/core/app/repo/common.go
ssongliu e55ea96f00 feat: support virtual machine (#13171)
* feat: support virtual machine

* feat: add vm operation logs
2026-07-02 15:07:48 +08:00

126 lines
2.8 KiB
Go

package repo
import (
"fmt"
"time"
"github.com/1Panel-dev/1Panel/core/constant"
"github.com/1Panel-dev/1Panel/core/global"
"github.com/1Panel-dev/1Panel/core/utils/re"
"gorm.io/gorm"
)
func WithByID(id uint) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("id = ?", id)
}
}
func WithByGroupID(id uint) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("group_id = ?", id)
}
}
func WithByIDs(ids []uint) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("id in (?)", ids)
}
}
func WithByStringIDs(ids []string) global.DBOption {
var idItems []uint
for _, id := range ids {
var idItem uint
if _, err := fmt.Sscanf(id, "%d", &idItem); err == nil && idItem != 0 {
idItems = append(idItems, idItem)
}
}
return func(g *gorm.DB) *gorm.DB {
return g.Where("id IN (?)", idItems)
}
}
func WithByName(name string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("`name` = ?", name)
}
}
func WithByLikeName(name string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
if len(name) == 0 {
return g
}
return g.Where("name like ?", "%"+name+"%")
}
}
func WithByUserID(userID string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("user_id = ?", userID)
}
}
func WithoutByName(name string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("`name` != ?", name)
}
}
func WithByType(ty string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("`type` = ?", ty)
}
}
func WithByAddr(addr string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("addr = ?", addr)
}
}
func WithByKey(key string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("key = ?", key)
}
}
func WithByStatus(status string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("status = ?", status)
}
}
func WithByCreatedAt(startTime, endTime time.Time) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("created_at > ? AND created_at < ?", startTime, endTime)
}
}
func WithByNode(node string) global.DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("node = ?", node)
}
}
func WithOrderDesc(orderBy string) global.DBOption {
return WithOrderRuleBy(orderBy, constant.OrderDesc)
}
func WithOrderAsc(orderBy string) global.DBOption {
return WithOrderRuleBy(orderBy, constant.OrderAsc)
}
func WithOrderRuleBy(orderBy, order string) global.DBOption {
if orderBy == "createdAt" {
orderBy = "created_at"
}
if !re.GetRegex(re.OrderByValidationPattern).MatchString(orderBy) {
orderBy = "created_at"
}
switch order {
case constant.OrderDesc:
order = "desc"
case constant.OrderAsc:
order = "asc"
default:
orderBy = "created_at"
order = "desc"
}
return func(g *gorm.DB) *gorm.DB {
return g.Order(fmt.Sprintf("%s %s", orderBy, order))
}
}