50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.nobla.cn/golang/aeus-admin/models"
|
|
"git.nobla.cn/golang/aeus-admin/pkg/dbcache"
|
|
"git.nobla.cn/golang/aeus/pkg/cache"
|
|
"git.nobla.cn/golang/rest"
|
|
"git.nobla.cn/golang/rest/types"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Menu struct {
|
|
db *gorm.DB
|
|
cache cache.Cache
|
|
sqlDependency *dbcache.SqlDependency
|
|
}
|
|
|
|
func (u *Menu) GetMenus(ctx context.Context) (values []*models.Menu, err error) {
|
|
return dbcache.TryCache(ctx, "menus", func(tx *gorm.DB) ([]*models.Menu, error) {
|
|
var items []*models.Menu
|
|
err = tx.Order("`position`,`id` ASC").Find(&items).Error
|
|
return items, err
|
|
},
|
|
dbcache.WithDB(u.db),
|
|
dbcache.WithCache(u.cache),
|
|
dbcache.WithDependency(u.sqlDependency),
|
|
)
|
|
}
|
|
|
|
func (u *Menu) GetLabels(ctx context.Context) (values []*types.TypeValue[string], err error) {
|
|
return dbcache.TryCache(ctx, fmt.Sprintf("menu:labels"), func(tx *gorm.DB) ([]*types.TypeValue[string], error) {
|
|
return rest.ModelTypes[string](ctx, tx, &models.Menu{}, "", "label", "name")
|
|
},
|
|
dbcache.WithDB(u.db),
|
|
dbcache.WithCache(u.cache),
|
|
dbcache.WithDependency(u.sqlDependency),
|
|
)
|
|
}
|
|
|
|
func NewMenuLogic(db *gorm.DB, ch cache.Cache) *Menu {
|
|
return &Menu{
|
|
db: db,
|
|
cache: ch,
|
|
sqlDependency: dbcache.NewSqlDependency("SELECT MAX(`updated_at`) FROM menus"),
|
|
}
|
|
}
|