85 lines
1.6 KiB
Go
85 lines
1.6 KiB
Go
package dto
|
|
|
|
import (
|
|
"github.com/go-admin-team/go-admin-core/tools/search"
|
|
"go-admin/common/global"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type GeneralDelDto struct {
|
|
Id int `uri:"id" json:"id" validate:"required"`
|
|
Ids []int `json:"ids"`
|
|
}
|
|
|
|
func (g GeneralDelDto) GetIds() []int {
|
|
ids := make([]int, 0)
|
|
if g.Id != 0 {
|
|
ids = append(ids, g.Id)
|
|
}
|
|
if len(g.Ids) > 0 {
|
|
for _, id := range g.Ids {
|
|
if id > 0 {
|
|
ids = append(ids, id)
|
|
}
|
|
}
|
|
} else {
|
|
if g.Id > 0 {
|
|
ids = append(ids, g.Id)
|
|
}
|
|
}
|
|
if len(ids) <= 0 {
|
|
//方式全部删除
|
|
ids = append(ids, 0)
|
|
}
|
|
return ids
|
|
}
|
|
|
|
type GeneralGetDto struct {
|
|
Id int `uri:"id" json:"id" validate:"required"`
|
|
}
|
|
|
|
func MakeCondition(q interface{}) func(db *gorm.DB) *gorm.DB {
|
|
return func(db *gorm.DB) *gorm.DB {
|
|
condition := &search.GormCondition{
|
|
GormPublic: search.GormPublic{},
|
|
Join: make([]*search.GormJoin, 0),
|
|
}
|
|
search.ResolveSearchQuery(global.Driver, q, condition)
|
|
for _, join := range condition.Join {
|
|
if join == nil {
|
|
continue
|
|
}
|
|
db = db.Joins(join.JoinOn)
|
|
for k, v := range join.Where {
|
|
db = db.Where(k, v...)
|
|
}
|
|
for k, v := range join.Or {
|
|
db = db.Or(k, v...)
|
|
}
|
|
for _, o := range join.Order {
|
|
db = db.Order(o)
|
|
}
|
|
}
|
|
for k, v := range condition.Where {
|
|
db = db.Where(k, v...)
|
|
}
|
|
for k, v := range condition.Or {
|
|
db = db.Or(k, v...)
|
|
}
|
|
for _, o := range condition.Order {
|
|
db = db.Order(o)
|
|
}
|
|
return db
|
|
}
|
|
}
|
|
|
|
func Paginate(pageSize, pageIndex int) func(db *gorm.DB) *gorm.DB {
|
|
return func(db *gorm.DB) *gorm.DB {
|
|
offset := (pageIndex - 1) * pageSize
|
|
if offset < 0 {
|
|
offset = 0
|
|
}
|
|
return db.Offset(offset).Limit(pageSize)
|
|
}
|
|
}
|