aeus-admin/internal/logic/menu.go

45 lines
1.1 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/rest"
"git.nobla.cn/golang/rest/types"
"gorm.io/gorm"
)
type Menu struct {
db *gorm.DB
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.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.WithDependency(u.sqlDependency),
)
}
func NewMenuLogic(db *gorm.DB) *Menu {
return &Menu{
db: db,
sqlDependency: dbcache.NewSqlDependency("SELECT MAX(`updated_at`) FROM menus"),
}
}